From 5e1f9f7975f99fc9879b0c87219a3acf36bab2ae Mon Sep 17 00:00:00 2001 From: xuzihan129 Date: Mon, 7 Jul 2025 23:04:42 +0800 Subject: [PATCH 001/109] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzihan129 --- .../window_stage_ani/ets/@ohos.window.ets | 158 +++++++++ .../window_stage_ani/include/ani_window.h | 8 + .../include/ani_window_utils.h | 2 + .../window_stage_ani/src/ani_window.cpp | 313 ++++++++++++++++++ .../window_stage_ani/src/ani_window_utils.cpp | 29 ++ 5 files changed, 510 insertions(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 93f1a99726..15d575e0c2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant'; import { AsyncCallback, BusinessError, Callback } from '@ohos.base'; import { LocalStorage } from '@ohos.arkui.stateManagement'; import { UIContext } from '@ohos.arkui.UIContext'; @@ -1127,6 +1128,63 @@ export interface WindowLimits { minHeight: number; } +/** + * The decor button style of the window. + * + * @interface DecorButtonStyle + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 14 + * @arkts 1.1&1.2 + */ +export interface DecorButtonStyle { + /** + * color mode. + * + * @type { ?colorMode } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 14 + */ + colorMode?: ConfigurationConstant.ColorMode; + + /** + * button background size when hover. + * + * @type { ?number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 14 + */ + buttonBackgroundSize?: number; + + /** + * button spacing. + * + * @type { ?number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 14 + */ + spacingBetweenButtons?: number; + + /** + * close button right margin. + * + * @type { ?number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 14 + */ + closeButtonRightMargin?: number; +} + +export interface WindowTitleButtonVisibleParam { + isMaximizeButtonVisible: boolean; + isMinimizeButtonVisible: boolean; + isCloseButtonVisible: boolean; +} + export class WindowStageInternal implements WindowStage { static { loadLibrary('windowstageani_kit.z') } @@ -1214,6 +1272,13 @@ export class WindowInternal implements Window { this.nativeObj = nativeObj; } + private native startMoving(nativeObj: long): void; + private native startMoveWindowWithCoordinate(nativeObj: long, offsetX: double, offsetY: double): void; + private native setWindowTitleButtonVisible(nativeObj: long, visibleParam: WindowTitleButtonVisibleParam): void; + private native setDecorButtonStyle(nativeObj: long, decorStyle: DecorButtonStyle): void; + private native getWindowStatus(nativeObj: long): int; + private native minimize(nativeObj: long): void; + private native maximize(nativeObj: long, presentation: int): void; private native getWindowDecorHeight(nativeObj:long): double; private native setWindowBackgroundColor(nativeObj: long, color: string): int; private native setImmersiveModeEnabledState(nativeObj: long, enable: boolean): int; @@ -1241,6 +1306,90 @@ export class WindowInternal implements Window { private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; + public startMoving(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + taskpool.execute((): void => { + this.startMoving(this.nativeObj); + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + + public startMoving(offsetX: double, offsetY: double): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + taskpool.execute((): void => { + this.startMoveWindowWithCoordinate(this.nativeObj, offsetX, offsetY); + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + + public setWindowTitleButtonVisible(isMaximizeButtonVisible: boolean, isMinimizeButtonVisible: boolean, + isCloseButtonVisible?: boolean): void { + let visibleParam: window.WindowTitleButtonVisibleParam = { + isMaximizeButtonVisible: isMaximizeButtonVisible, + isMinimizeButtonVisible: isMinimizeButtonVisible, + isCloseButtonVisible: true + }; + if (isCloseButtonVisible != undefined) { + visibleParam.isCloseButtonVisible = isCloseButtonVisible; + } + this.setWindowTitleButtonVisible(this.nativeObj, visibleParam); + } + + public setDecorButtonStyle(decorStyle: DecorButtonStyle): void { + this.setDecorButtonStyle(this.nativeObj, decorStyle); + } + + public getWindowStatus(): WindowStatusType { + return this.getWindowStatus(this.nativeObj) as WindowStatusType; + } + + public minimize(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + taskpool.execute((): void => { + this.minimize(this.nativeObj); + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + + public minimize(callback: AsyncCallback): void { + taskpool.execute((): void => { + this.minimize(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public maximize(presentation?: MaximizePresentation): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + taskpool.execute((): void => { + if (presentation == undefined) { + this.maximize(this.nativeObj, MaximizePresentation.ENTER_IMMERSIVE as int); + } + else { + this.maximize(this.nativeObj, presentation as int); + } + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + public getWindowDecorHeight(): number { let ret = this.getWindowDecorHeight(this.nativeObj); return ret; @@ -1624,6 +1773,15 @@ export class WindowInternal implements Window { } export interface Window { + startMoving(): Promise; + startMoving(offsetX: double, offsetY: double): Promise; + setWindowTitleButtonVisible(isMaximizeButtonVisible: boolean, isMinimizeButtonVisible: boolean, + isCloseButtonVisible?: boolean): void; + setDecorButtonStyle(dectorStyle: DecorButtonStyle): void; + getWindowStatus(): WindowStatusType; + minimize(callback: AsyncCallback): void; + minimize(): Promise; + maximize(presentation?: MaximizePresentation): Promise; getWindowDecorHeight(): double; setWindowBackgroundColor(color: string | ColorMetrics): void; setBackgroundColor(color: string): Promise; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index 7c0f0b0b61..91476d5377 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -56,6 +56,14 @@ public: static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); + void StartMoving(ani_env* env); + void StartMoveWindowWithCoordinate(ani_env* env, ani_double offsetX, ani_double offsetY); + void SetWindowTitleButtonVisible(ani_env* env, ani_object visibleParam); + void SetDecorButtonStyle(ani_env* env, ani_object decorStyle); + ani_int GetWindowStatus(ani_env* env); + void Minimize(ani_env* env); + void HideWindowFunction(ani_env* env, WmErrorCode errCode); + void Maximize(ani_env* env, ani_int presentation); ani_double GetWindowDecorHeight(ani_env* env); ani_object SetWindowBackgroundColor(ani_env* env, const std::string& color); ani_object SetImmersiveModeEnabledState(ani_env* env, bool enable); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 5c80902662..ffa18664d3 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -291,6 +291,8 @@ public: std::map& windowPropertyFlags, const ani_object& aniProperties, const sptr& window); + static bool SetDecorButtonStyleFromAni(ani_env* env, DecorButtonStyle& decorButtonStyle, + const ani_object& decorStyle); static void GetSystemBarPropertiesFromAni(sptr& window, std::map& newProperties, std::map& newPropertyFlags, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index d0e39bc039..1859059848 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -525,6 +525,219 @@ __attribute__((no_sanitize("cfi"))) return obj; } +void AniWindow::StartMoving(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken_ is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSystemWindow(windowToken_->GetType()) && + !WindowHelper::IsMainWindow(windowToken_->GetType()) && + !WindowHelper::IsSubWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] This is not valid window."); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode err = windowToken_->StartMoveWindow(); + if (err != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] Move system window failed."); + AniWindowUtils::AniThrowError(env, err); + } +} + +void AniWindow::StartMoveWindowWithCoordinate(ani_env* env, ani_double offsetX, ani_double offsetY) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowToken is null."); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WindowType windowType = windowToken_->GetType(); + if (!WindowHelper::IsSystemWindow(windowType) && !WindowHelper::IsAppWindow(windowType)) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Invalid window type:%{public}u", windowType); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = windowToken_->StartMoveWindowWithCoordinate(static_cast(offsetX), static_cast(offsetY)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Move window failed."); + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindow::SetWindowTitleButtonVisible(ani_env* env, ani_object visibleParam) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] WindowToken is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + ani_boolean isMaximizeButtonVisible = false; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(visibleParam, + "isMaximizeButtonVisible", &isMaximizeButtonVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ani_boolean isMinimizeButtonVisible = false; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(visibleParam, + "isMinimizeButtonVisible", &isMinimizeButtonVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ani_boolean isCloseButtonVisible = false; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(visibleParam, + "isCloseButtonVisible", &isCloseButtonVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] Window [%{public}u, %{public}s] [%{public}d, %{public}d, %{public}d]", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), + isMaximizeButtonVisible, isMinimizeButtonVisible, isCloseButtonVisible); + WMError errCode = windowToken_->SetTitleButtonVisible(isMaximizeButtonVisible, isMinimizeButtonVisible, + isMaximizeButtonVisible, isCloseButtonVisible); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(errCode); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] set title button visible failed!"); + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindow::SetDecorButtonStyle(ani_env* env, ani_object decorStyle) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] WindowToken is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!windowToken_->IsPcOrPadFreeMultiWindowMode()) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] device not support"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); + return; + } + + DecorButtonStyle decorButtonStyle; + WMError res = windowToken_->GetDecorButtonStyle(decorButtonStyle); + if (res != WMError::WM_OK) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + if (!AniWindowUtils::SetDecorButtonStyleFromAni(env, decorButtonStyle, decorStyle)) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Argc is invalid"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] param [%{public}d, %{public}d, %{public}d, %{public}d] to be updated", + decorButtonStyle.colorMode, decorButtonStyle.spacingBetweenButtons, + decorButtonStyle.closeButtonRightMargin, decorButtonStyle.buttonBackgroundSize); + if (!WindowHelper::CheckButtonStyleValid(decorButtonStyle)) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] out of range params"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WMError errCode = windowToken_->SetDecorButtonStyle(decorButtonStyle); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(errCode); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] set decor button fail"); + AniWindowUtils::AniThrowError(env, ret); + } +} + +ani_int AniWindow::GetWindowStatus(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] window is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ANI_ERROR; + } + WindowStatus windowStatus; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetWindowStatus(windowStatus)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] Get window status failed, ret=%{public}d", ret); + AniWindowUtils::AniThrowError(env, ret); + return ANI_ERROR; + } + TLOGI(WmsLogTag::WMS_PC, "[ANI] window [%{public}u, %{public}s] end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); + return static_cast(windowStatus); +} + +void AniWindow::Minimize(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + + if (WindowHelper::IsFloatOrSubWindow(windowToken_->GetType())) { + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] subWindow or float window use hide"); + HideWindowFunction(env, WmErrorCode::WM_OK); + return; + } + + WMError ret = windowToken_->Minimize(); + TLOGNI(WmsLogTag::WMS_PC, "[ANI] Window [%{public}u, %{public}s] minimize end, ret=%{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), ret); + if (ret != WMError::WM_OK) { + WmErrorCode wmErrorCode = WM_JS_TO_ERROR_CODE_MAP.at(ret); + AniWindowUtils::AniThrowError(env, wmErrorCode); + } +} + +void AniWindow::HideWindowFunction(ani_env* env, WmErrorCode errCode) +{ + if (errCode != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, errCode); + return; + } + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] window is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGW(WmsLogTag::WMS_LIFE, "[ANI] window type %{public}u is not supported, [%{public}u, %{public}s]", + static_cast(windowToken_->GetType()), + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->Hide(0, false, false)); + TLOGI(WmsLogTag::WMS_LIFE, "[ANI] end, window [%{public}u] ret=%{public}d", + windowToken_->GetWindowId(), ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindow::Maximize(ani_env* env, ani_int presentation) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowToken is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!(WindowHelper::IsMainWindow(windowToken_->GetType()) || + windowToken_->IsSubWindowMaximizeSupported())) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] only support main or sub Window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + if (presentation < static_cast(MaximizePresentation::FOLLOW_APP_IMMERSIVE_SETTING) || + presentation > static_cast(MaximizePresentation::ENTER_IMMERSIVE_DISABLE_TITLE_AND_DOCK_HOVER)) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Failed to convert parameter to presentationValue"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + MaximizePresentation presentationValue = static_cast(presentation); + WMError ret = windowToken_->Maximize(presentationValue); + if (ret != WMError::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] maximize failed"); + WmErrorCode wmErrorCode = WM_JS_TO_ERROR_CODE_MAP.at(ret); + AniWindowUtils::AniThrowError(env, wmErrorCode); + } +} + ani_double AniWindow::GetWindowDecorHeight(ani_env* env) { int32_t height { 0 }; @@ -795,6 +1008,92 @@ ani_object AniWindow::SetSpecificSystemBarEnabled(ani_env* env, ani_string name, } // namespace Rosen } // namespace OHOS +static void StartMoving(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is null"); + return; + } + aniWindow->StartMoving(env); +} + +static void StartMoveWindowWithCoordinate(ani_env* env, ani_object obj, ani_long nativeObj, + ani_double offsetX, ani_double offsetY) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is null"); + return; + } + aniWindow->StartMoveWindowWithCoordinate(env, offsetX, offsetY); +} + +static void SetWindowTitleButtonVisible(ani_env* env, ani_object obj, ani_long nativeObj, + ani_object visibleParam) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return; + } + aniWindow->SetWindowTitleButtonVisible(env, visibleParam); +} + +static void SetDecorButtonStyle(ani_env* env, ani_object obj, ani_long nativeObj, ani_object decorStyle) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return; + } + aniWindow->SetDecorButtonStyle(env, decorStyle); +} + +static ani_int GetWindowStatus(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] windowToken is null"); + return ANI_ERROR; + } + return aniWindow->GetWindowStatus(env); +} + +static void Minimize(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken is null"); + return; + } + aniWindow->Minimize(env); +} + +static void Maximize(ani_env* env, ani_object obj, ani_long nativeObj, ani_int presentation) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken is null"); + return; + } + aniWindow->Maximize(env, presentation); +} + static ani_double WindowGetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; @@ -1012,6 +1311,20 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } std::array methods = { + ani_native_function {"startMoving", "J:V", + reinterpret_cast(StartMoving)}, + ani_native_function {"startMoveWindowWithCoordinate", "JDD:V", + reinterpret_cast(StartMoveWindowWithCoordinate)}, + ani_native_function {"setWindowTitleButtonVisible", "JL@ohos/window/window/WindowTitleButtonVisibleParam;:V", + reinterpret_cast(SetWindowTitleButtonVisible)}, + ani_native_function {"setDecorButtonStyle", "JL@ohos/window/window/DecorButtonStyle;:V", + reinterpret_cast(SetDecorButtonStyle)}, + ani_native_function {"getWindowStatus", "J:I", + reinterpret_cast(GetWindowStatus)}, + ani_native_function {"minimize", "J:V", + reinterpret_cast(Minimize)}, + ani_native_function {"maximize", "JI:V", + reinterpret_cast(Maximize)}, ani_native_function {"getWindowDecorHeight", "J:D", reinterpret_cast(WindowGetWindowDecorHeight)}, ani_native_function {"setWindowBackgroundColor", "JLstd/core/String;:I", diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 3da485ebe4..7f06381e31 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -566,6 +566,35 @@ bool AniWindowUtils::SetWindowNavigationBarContentColor(ani_env* env, return true; } +bool AniWindowUtils::SetDecorButtonStyleFromAni(ani_env* env, DecorButtonStyle& decorButtonStyle, + const ani_object& decorStyle) +{ + int32_t colorMode; + bool emptyParam = true; + ani_ref colorModeRef; + if (ANI_OK == env->Object_GetPropertyByName_Ref(decorStyle, "colorMode", &colorModeRef) && + ANI_OK == env->EnumItem_GetValue_Int(static_cast(colorModeRef), &colorMode)) { + decorButtonStyle.colorMode = colorMode; + emptyParam = false; + } + ani_double buttonBackgroundSize; + if (ANI_OK == env->Object_GetPropertyByName_Double(decorStyle, "buttonBackgroundSize", &buttonBackgroundSize)) { + decorButtonStyle.buttonBackgroundSize = static_cast(buttonBackgroundSize); + emptyParam = false; + } + ani_double spacingBetweenButtons; + if (ANI_OK == env->Object_GetPropertyByName_Double(decorStyle, "spacingBetweenButtons", &spacingBetweenButtons)) { + decorButtonStyle.spacingBetweenButtons = static_cast(spacingBetweenButtons); + emptyParam = false; + } + ani_double closeButtonRightMargin; + if (ANI_OK == env->Object_GetPropertyByName_Double(decorStyle, "closeButtonRightMargin", &closeButtonRightMargin)) { + decorButtonStyle.closeButtonRightMargin = static_cast(closeButtonRightMargin); + emptyParam = false; + } + return !emptyParam; +} + bool AniWindowUtils::SetSystemBarPropertiesFromAni(ani_env* env, std::map& windowBarProperties, std::map& windowPropertyFlags, -- Gitee From e3b59a0c40f167bf617dc2195c2bf3694730ecc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=87=AF?= Date: Tue, 8 Jul 2025 02:25:56 +0000 Subject: [PATCH 002/109] ani input method func MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张凯 Change-Id: I2ff75ba4f3899286223ca3dd7d3c6a9043baf368 --- .../window_stage_ani/ets/@ohos.window.ets | 47 +++++++++++++++++++ .../window_stage_ani/include/ani_window.h | 2 + .../include/ani_window_listener.h | 8 +++- .../include/ani_window_register_manager.h | 6 +++ .../include/ani_window_utils.h | 1 + .../window_stage_ani/src/ani_window.cpp | 36 ++++++++++++++ .../src/ani_window_listener.cpp | 42 +++++++++++++++++ .../src/ani_window_register_manager.cpp | 42 ++++++++++++++++- .../window_stage_ani/src/ani_window_utils.cpp | 30 ++++++++++++ 9 files changed, 212 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 93f1a99726..0bc9a31612 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -22,6 +22,8 @@ export type AsyncCallbackVoid = (err: BusinessError) => void; export type WindowEventCallback = (data: window.WindowEventType) => void; export type WindowSizeCallback = (data: window.Size) => void; export type WindowStatusCallback = (data: window.WindowStatusType) => void; +export type KeyboardHeightChangeCallback = (data: number) => void; +export type KeyboardDidShowOrHideCallback = (data: window.KeyboardInfo) => void; namespace window { export interface Size { @@ -1127,6 +1129,30 @@ export interface WindowLimits { minHeight: number; } +/** + * The information of keyboard + * + * @interface KeyboardInfo + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 18 + */ +export interface KeyboardInfo { + /** + * The position and size of the keyboard + * + * @type { Rect } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 18 + */ + rect: Rect; +} + +export class KeyboardInfoInternal implements KeyboardInfo { + rect: Rect; +} + export class WindowStageInternal implements WindowStage { static { loadLibrary('windowstageani_kit.z') } @@ -1238,6 +1264,7 @@ export class WindowInternal implements Window { private native getUIContextSync(nativeObj: long): UIContext; private native getWindowAvoidAreaSync(nativeObj: long, type: int): AvoidArea; private native setWaterMarkFlagSync(nativeObj: long, enable: boolean): void; + private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; @@ -1614,6 +1641,10 @@ export class WindowInternal implements Window { }); } + public keepKeyboardOnFocus(keepKeyboardFlag: boolean): void { + this.keepKeyboardOnFocusSync(this.nativeObj, keepKeyboardFlag); + } + public on(type: string, callback: Callback): void { this.onSync(this.nativeObj, type, callback); } @@ -1662,6 +1693,7 @@ export interface Window { getWindowAvoidArea(type: AvoidAreaType): AvoidArea; setWaterMarkFlag(enable: boolean): Promise; setWaterMarkFlag(enable: boolean, callback: AsyncCallback): void; + keepKeyboardOnFocus(enable: boolean): void; on(type: string, callback: Callback): void; off(type: string, callback?: Callback): void; } @@ -1709,6 +1741,21 @@ function runWindowSizeCallBack(cb: object, cbArg: object): void { func(cbArg as Size); } +function runKeyboardHeightChangeCallBack(cb: object, cbArg: number): void { + const func = cb as (cbArg: number) => void; + func(cbArg as number); +} + +function runKeyboardDidShowCallBack(cb: object, cbArg: object): void { + const func = cb as (cbArg: KeyboardInfo) => void; + func(cbArg as KeyboardInfo); +} + +function runKeyboardDidHideCallBack(cb: object, cbArg: object): void { + const func = cb as (cbArg: KeyboardInfo) => void; + func(cbArg as KeyboardInfo); +} + function runWindowStatusCallBack(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowStatusType) => void; func(cbArg as WindowStatusType); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index 7c0f0b0b61..24202ba6ca 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -55,6 +55,7 @@ public: ani_ref callback); static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); + static void KeepKeyboardOnFocus(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean keepKeyboardFlag); ani_double GetWindowDecorHeight(ani_env* env); ani_object SetWindowBackgroundColor(ani_env* env, const std::string& color); @@ -83,6 +84,7 @@ private: ani_object OnGetWindowAvoidArea(ani_env* env, ani_int type); void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); void OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); + void OnKeepKeyboardOnFocus(ani_env* env, ani_boolean keepKeyboardFlag); bool GetSystemBarStatus(std::map& systemBarProperties, std::map& systemBarpropertyFlags, const std::vector& names, sptr& window); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index cc8befc89a..d04261153f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -37,6 +37,8 @@ const std::string LIFECYCLE_EVENT_CB = "lifeCycleEvent"; const std::string WINDOW_STAGE_EVENT_CB = "windowStageEvent"; const std::string WINDOW_EVENT_CB = "windowEvent"; const std::string KEYBOARD_HEIGHT_CHANGE_CB = "keyboardHeightChange"; +const std::string KEYBOARD_DID_SHOW_CB = "keyboardDidShow"; +const std::string KEYBOARD_DID_HIDE_CB = "keyboardDidHide"; const std::string TOUCH_OUTSIDE_CB = "touchOutside"; const std::string SCREENSHOT_EVENT_CB = "screenshot"; const std::string DIALOG_TARGET_TOUCH_CB = "dialogTargetTouch"; @@ -56,6 +58,8 @@ class AniWindowListener : public IWindowChangeListener, public IAvoidAreaChangedListener, public IWindowLifeCycle, public IOccupiedAreaChangeListener, + public IKeyboardDidShowListener, + public IKeyboardDidHideListener, public ITouchOutsideListener, public IScreenshotListener, public IDialogTargetTouchListener, @@ -88,7 +92,9 @@ public: void AfterPaused() override; void AfterDestroyed() override; void OnSizeChange(const sptr& info, - const std::shared_ptr& rsTransaction = nullptr) override; + const std::shared_ptr& rsTransaction = nullptr) override; + void OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanelInfo) override; + void OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanelInfo) override; void OnTouchOutside() const override; void OnScreenshot() override; void OnDialogTargetTouch() const override; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 9f9648e7e4..846b748513 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -34,6 +34,8 @@ enum class RegisterListenerType : uint32_t { LIFECYCLE_EVENT_CB, WINDOW_EVENT_CB, KEYBOARD_HEIGHT_CHANGE_CB, + KEYBOARD_DID_SHOW_CB, + KEYBOARD_DID_HIDE_CB, TOUCH_OUTSIDE_CB, SCREENSHOT_EVENT_CB, DIALOG_TARGET_TOUCH_CB, @@ -68,6 +70,10 @@ private: ani_env* env); WmErrorCode ProcessOccupiedAreaChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); + WmErrorCode ProcessKeyboardDidShowRegister(sptr listener, sptr window, + bool isRegister, ani_env* env); + WmErrorCode ProcessKeyboardDidHideRegister(sptr listener, sptr window, + bool isRegister, ani_env* env); WmErrorCode ProcessSystemBarChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessTouchOutsideRegister(sptr listener, sptr window, bool isRegister, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 5c80902662..07b93e1500 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -269,6 +269,7 @@ public: static ani_object CreateAniSize(ani_env* env, int32_t width, int32_t height); static ani_object CreateAniRect(ani_env* env, const Rect& rect); static ani_object CreateAniAvoidArea(ani_env* env, const AvoidArea& avoidArea, AvoidAreaType type); + static ani_object CreateAniKeyboardInfo(ani_env* env, const KeyboardPanelInfo& keyboardPanelInfo); static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, const char* func, const char* signature, ...); static ani_status CallAniMethodVoid(ani_env* env, ani_object object, const char* cls, const char* method, const char* signature, ...); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index d0e39bc039..e18d255174 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -623,6 +623,40 @@ void AniWindow::OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_re } } +void AniWindow::KeepKeyboardOnFocus(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean keepKeyboardFlag) +{ + TLOGI(WmsLogTag::WMS_KEYBOARD, "[ANI]In"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnKeepKeyboardOnFocus(env, keepKeyboardFlag); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnKeepKeyboardOnFocus(ani_env* env, ani_boolean keepKeyboardFlag) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "WindowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSystemWindow(windowToken_->GetType()) && + !WindowHelper::IsSubWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "not allowed since window is not system window or app subwindow"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + WmErrorCode ret = windowToken_->KeepKeyboardOnFocus(keepKeyboardFlag); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "failed"); + AniWindowUtils::AniThrowError(env, ret); + } + TLOGE(WmsLogTag::WMS_KEYBOARD, "end, window [%{public}u, %{public}s] keepKeyboardFlag=%{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), keepKeyboardFlag); +} + ani_object AniWindow::SetImmersiveModeEnabledState(ani_env* env, bool enable) { if (!WindowHelper::IsMainWindow(windowToken_->GetType()) && @@ -1059,6 +1093,8 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::GetWindowAvoidArea)}, ani_native_function {"setWaterMarkFlagSync", "JZ:V", reinterpret_cast(AniWindow::SetWaterMarkFlag)}, + ani_native_function {"keepKeyboardOnFocusSync", "JZ:V", + reinterpret_cast(AniWindow::KeepKeyboardOnFocus)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindow::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index e55f8476ee..d2ed3bb582 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -161,6 +161,48 @@ void AniWindowListener::AfterDestroyed() void AniWindowListener::OnSizeChange(const sptr& info, const std::shared_ptr& rsTransaction) { + TLOGI(WmsLogTag::WMS_KEYBOARD, + "OccupiedAreaChangeInfo, type: %{public}u, input rect: [%{public}d, %{public}d, %{public}u, %{public}u]", + static_cast(info->type_), + info->rect_.posX_, info->rect_.posY_, info->rect_.width_, info->rect_.height_); + // callback should run in js thread + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + return; + } + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallBack", + nullptr, thisListener->aniCallBack_, static_cast(info->rect_.height_)); +} + +void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanelInfo) +{ + TLOGI(WmsLogTag::WMS_KEYBOARD, + "keyboardPanelInfo, rect: [%{public}d, %{public}d, %{public}u, %{public}u]", + keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, + keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + return; + } + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallBack", + nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); +} + +void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanelInfo) +{ + TLOGI(WmsLogTag::WMS_KEYBOARD, + "keyboardPanelInfo, rect: [%{public}d, %{public}d, %{public}u, %{public}u]", + keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, + keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + return; + } + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallBack", + nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } void AniWindowListener::OnTouchOutside() const diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 310aab13aa..b9913addd8 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -36,6 +36,8 @@ const std::map WINDOW_LISTENER_MAP { {LIFECYCLE_EVENT_CB, RegisterListenerType::LIFECYCLE_EVENT_CB}, {WINDOW_EVENT_CB, RegisterListenerType::WINDOW_EVENT_CB}, {KEYBOARD_HEIGHT_CHANGE_CB, RegisterListenerType::KEYBOARD_HEIGHT_CHANGE_CB}, + {KEYBOARD_DID_SHOW_CB, RegisterListenerType::KEYBOARD_DID_SHOW_CB}, + {KEYBOARD_DID_HIDE_CB, RegisterListenerType::KEYBOARD_DID_HIDE_CB}, {TOUCH_OUTSIDE_CB, RegisterListenerType::TOUCH_OUTSIDE_CB}, {SCREENSHOT_EVENT_CB, RegisterListenerType::SCREENSHOT_EVENT_CB}, {DIALOG_TARGET_TOUCH_CB, RegisterListenerType::DIALOG_TARGET_TOUCH_CB}, @@ -145,7 +147,7 @@ WmErrorCode AniWindowRegisterManager::ProcessOccupiedAreaChangeRegister(sptr window, bool isRegister, ani_env* env) { if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]Window is nullptr"); + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]Window is nullptr"); return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; } sptr thisListener(listener); @@ -158,6 +160,40 @@ WmErrorCode AniWindowRegisterManager::ProcessOccupiedAreaChangeRegister(sptr listener, + sptr window, bool isRegister, ani_env* env) +{ + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]Window is nullptr"); + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterKeyboardDidShowListener(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterKeyboardDidShowListener(thisListener)); + } + return ret; +} + +WmErrorCode AniWindowRegisterManager::ProcessKeyboardDidHideRegister(sptr listener, + sptr window, bool isRegister, ani_env* env) +{ + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]Window is nullptr"); + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterKeyboardDidHideListener(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterKeyboardDidHideListener(thisListener)); + } + return ret; +} + WmErrorCode AniWindowRegisterManager::ProcessSystemBarChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env) { @@ -399,6 +435,10 @@ WmErrorCode AniWindowRegisterManager::ProcessWindowListener(RegisterListenerType return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); case static_cast(RegisterListenerType::KEYBOARD_HEIGHT_CHANGE_CB): return ProcessOccupiedAreaChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::KEYBOARD_DID_SHOW_CB): + return ProcessKeyboardDidShowRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::KEYBOARD_DID_HIDE_CB): + return ProcessKeyboardDidHideRegister(windowManagerListener, window, isRegister, env); case static_cast(RegisterListenerType::TOUCH_OUTSIDE_CB): return ProcessTouchOutsideRegister(windowManagerListener, window, isRegister, env); case static_cast(RegisterListenerType::SCREENSHOT_EVENT_CB): diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 3da485ebe4..839dbb296c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -216,6 +216,36 @@ ani_object AniWindowUtils::CreateAniAvoidArea(ani_env* env, const AvoidArea& avo return aniAvoidArea; } +ani_object AniWindowUtils::CreateAniKeyboardInfo(ani_env* env, const KeyboardPanelInfo& keyboardPanelInfo) +{ + TLOGI(WmsLogTag::WMS_KEYBOARD, "[ANI]"); + if (env == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] null env"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_class aniClass; + ani_status ret = env->FindClass("L@ohos/window/window/KeyboardInfoInternal;", &aniClass); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method aniCtor; + ret = env->Class_FindMethod(aniClass, "", nullptr, &aniCtor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object keyboardInfo; + ret = env->Object_New(aniClass, aniCtor, &keyboardInfo); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] failed to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, keyboardInfo, aniClass, "rect", nullptr, + CreateAniRect(env, keyboardPanelInfo.rect_)); + return keyboardInfo; +} + ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { -- Gitee From d4076bfc0ecbef2d06f8e6b2399ca727355bcef1 Mon Sep 17 00:00:00 2001 From: yanzhimo Date: Tue, 8 Jul 2025 14:24:46 +0800 Subject: [PATCH 003/109] =?UTF-8?q?=E3=80=90=E7=AA=97=E5=8F=A3=E5=8A=A8?= =?UTF-8?q?=E6=95=88=E4=B8=8E=E7=AA=97=E5=8F=A3=E6=97=8B=E8=BD=AC=E3=80=91?= =?UTF-8?q?=E5=BC=BA=E5=9F=BA=E6=8E=A5=E5=8F=A3=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yanzhimo --- .../window_stage_ani/ets/@ohos.window.ets | 202 +++++++++ .../window_stage_ani/include/ani_window.h | 14 + .../include/ani_window_utils.h | 4 + .../window_stage_ani/src/ani_window.cpp | 417 +++++++++++++++++- .../window_stage_ani/src/ani_window_utils.cpp | 90 ++++ 5 files changed, 722 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 0bc9a31612..5a5875b8d9 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1129,6 +1129,177 @@ export interface WindowLimits { minHeight: number; } +/** + * Describes the scale Transition Options of window + * + * @interface ScaleOptions + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ +export interface ScaleOptions { + /** + * The scale param of x direction. Default is 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + x?: number; + + /** + * The scale param of y direction. Default is 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + y?: number; + + /** + * The scale param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + pivotX?: number; + + /** + * The scale param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + pivotY?: number; +} + +export class ScaleOptionsInternal implements ScaleOptions { + x?: number; + y?: number; + pivotX?: number; + pivotY?: number; +} + +/** + * Describes the rotate Transition Options of window + * + * @interface RotateOptions + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ +export interface RotateOptions { + /** + * The rotate degree of x direction. Default value is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + x?: number; + + /** + * The rotate degree of y direction. Default value is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + y?: number; + + /** + * The rotate degree of z direction. Default value is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + z?: number; + + /** + * The param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + pivotX?: number; + + /** + * The param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + pivotY?: number; +} + +export class RotateOptionsInternal implements RotateOptions { + x?: number; + y?: number; + z?: number; + pivotX?: number; + pivotY?: number; +} + +/** + * Describes the translate Transition Options of window + * + * @interface TranslateOptions + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ +export interface TranslateOptions { + /** + * The translate pixel param of x direction. Default is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + x?: number; + + /** + * The translate pixel param of y direction. Default is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + y?: number; + + /** + * The translate pixel param of z direction. Default is 0.f + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi + * @since 9 + */ + z?: number; +} + +export class TranslateOptionsInternal implements TranslateOptions { + x?: number; + y?: number; + z?: number; +} + /** * The information of keyboard * @@ -1267,6 +1438,12 @@ export class WindowInternal implements Window { private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; + private native opacity(nativeObj: long, opacity: number): void; + private native scale(nativeObj: long, scaleOptions: ScaleOptions): void; + private native translate(nativeObj: long, translateOptions: TranslateOptions): void; + private native rotate(nativeObj: long, rotateOptions: RotateOptions): void; + private native setShadow(nativeObj: long, radius: number, color?: string, + offsetX?: number, offsetY?: number): void; public getWindowDecorHeight(): number { let ret = this.getWindowDecorHeight(this.nativeObj); @@ -1652,6 +1829,26 @@ export class WindowInternal implements Window { public off(type: string, callback?: Callback): void { this.offSync(this.nativeObj, type, callback); } + + public opacity(opacity: number): void { + this.opacity(this.nativeObj, opacity); + } + + public scale(scaleOptions: ScaleOptions): void { + this.scale(this.nativeObj, scaleOptions); + } + + public translate(translateOptions: TranslateOptions): void { + this.translate(this.nativeObj, translateOptions); + } + + public rotate(rotateOptions: RotateOptions): void { + this.rotate(this.nativeObj, rotateOptions); + } + + public setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void { + this.setShadow(this.nativeObj, radius, color, offsetX, offsetY); + } } export interface Window { @@ -1696,6 +1893,11 @@ export interface Window { keepKeyboardOnFocus(enable: boolean): void; on(type: string, callback: Callback): void; off(type: string, callback?: Callback): void; + opacity(opacity: number): void; + scale(scaleOptions: ScaleOptions): void; + translate(translateOptions: TranslateOptions): void; + rotate(rotateOptions: RotateOptions): void; + setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void; } export native function CreateWindowStage(scene: long): WindowStageInternal; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index 24202ba6ca..559aa3cb09 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -68,6 +68,12 @@ public: void SetSystemBarProperties(ani_env* env, ani_object aniSystemBarProperties); ani_object SetSpecificSystemBarEnabled(ani_env* env, ani_string, ani_boolean enable, ani_boolean enableAnimation); + static void Opacity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double opacity); + static void Scale(ani_env* env, ani_object obj, ani_long nativeObj, ani_object scaleOptions); + static void Translate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object translateOptions); + static void Rotate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object rotateOptions); + static void SetShadow(ani_env* env, ani_object obj, ani_long nativeObj, ani_double radius, + ani_string color, ani_object offsetX, ani_object offsetY); private: void OnSetWindowColorSpace(ani_env* env, ani_int colorSpace); @@ -92,6 +98,14 @@ private: const std::map& systemBarPropertyFlags, sptr windowToken); WMError SetSystemBarPropertiesByFlags(std::map& systemBarPropertyFlags, std::map& systemBarProperties, sptr windowToken); + void OnOpacity(ani_env* env, ani_double opacity); + void OnScale(ani_env* env, ani_object scaleOptions); + void OnTranslate(ani_env* env, ani_object translateOptions); + void OnRotate(ani_env* env, ani_object rotateOptions); + void OnSetShadow(ani_env* env, ani_double radius, ani_string color, ani_object offsetX, ani_object offsetY); + static bool ParseScaleOption(ani_env* env, ani_object scaleOptions, Transform& trans); + static bool ParseTranslateOption(ani_env* env, ani_object translateOptions, Transform& trans); + static bool ParseRotateOption(ani_env* env, ani_object rotateOptions, Transform& trans); sptr windowToken_ = nullptr; std::unique_ptr registerManager_ = nullptr; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 07b93e1500..44ad989c88 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -261,6 +261,10 @@ class AniWindowUtils { public: static ani_status GetStdString(ani_env* env, ani_string ani_str, std::string& result); static ani_status GetStdStringVector(ani_env* env, ani_object ary, std::vector& result); + static ani_status GetPropertyIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); + static ani_status GetPropertyDoubleObject(ani_env* env, const char* propertyName, + ani_object object, double& result); + static ani_status GetDoubleObject(ani_env* env, ani_object double_object, double& result); static ani_status NewAniObjectNoParams(ani_env* env, const char* cls, ani_object* object); static ani_status NewAniObject(ani_env* env, const char* cls, const char* signature, ani_object* result, ...); static ani_object CreateAniUndefined(ani_env* env); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index e18d255174..e7c80c01a3 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -22,11 +22,13 @@ #include "ani.h" #include "ani_err_utils.h" #include "ani_window_utils.h" +#include "permission.h" #include "window_helper.h" #include "window_scene.h" #include "window_manager.h" #include "window_manager_hilog.h" #include "wm_common.h" +#include "wm_math.h" using OHOS::Rosen::WindowScene; @@ -97,25 +99,420 @@ void AniWindow::OnSetWindowColorSpace(ani_env* env, ani_int colorSpace) void AniWindow::SetPreferredOrientation(ani_env* env, ani_object obj, ani_long nativeObj, ani_int orientation) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] orientation:%{public}d", static_cast(orientation)); + TLOGI(WmsLogTag::WMS_ROTATION, "[ANI] orientation:%{public}d", static_cast(orientation)); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { aniWindow->OnSetPreferredOrientation(env, orientation); } else { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] aniWindow is nullptr"); } } void AniWindow::OnSetPreferredOrientation(ani_env* env, ani_int orientation) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] orientation:%{public}d", static_cast(orientation)); + int32_t orientationValue = static_cast(orientation); + TLOGI(WmsLogTag::WMS_ROTATION, "[ANI] orientation:%{public}d", orientationValue); + WmErrorCode errCode = WmErrorCode::WM_OK; + Orientation requestedOrientation = Orientation::UNSPECIFIED; auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + + auto apiOrientation = static_cast(orientationValue); + if (apiOrientation < ApiOrientation::BEGIN || apiOrientation > ApiOrientation::END) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] Orientation %{public}u invalid!", + static_cast(apiOrientation)); + errCode = WmErrorCode::WM_ERROR_INVALID_PARAM; + } else { + requestedOrientation = JS_TO_NATIVE_ORIENTATION_MAP.at(apiOrientation); + } + window->SetRequestedOrientation(requestedOrientation); + window->NotifyPreferredOrientationChange(requestedOrientation); + TLOGNI(WmsLogTag::WMS_ROTATION, + "[ANI] SetPreferredOrientation end, window [%{public}u, %{public}s] orientation=%{public}u", + window->GetWindowId(), window->GetWindowName().c_str(), orientationValue); +} + +void AniWindow::Opacity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double opacity) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] opacity: %{public}f", static_cast(opacity)); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnOpacity(env, opacity); + } else { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnOpacity(ani_env* env, ani_double opacity) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - window->SetRequestedOrientation(static_cast(orientation)); + + if (!WindowHelper::IsSystemWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Opacity is not allowed since window is not system window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + if (MathHelper::LessNotEqual(static_cast(opacity), 0.0) || + MathHelper::GreatNotEqual(static_cast(opacity), 1.0)) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Opacity should greater than 0 or smaller than 1.0"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetAlpha(static_cast(opacity))); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Window Opacity failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGNI(WmsLogTag::WMS_ANIMATION, "[ANI] window [%{public}u, %{public}s] Opacity end, opacity=%{public}f", + window->GetWindowId(), window->GetWindowName().c_str(), static_cast(opacity)); +} + +void AniWindow::Scale(ani_env* env, ani_object obj, ani_long nativeObj, ani_object scaleOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] Set window Scale in"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnScale(env, scaleOptions); + } else { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] aniWindow is nullptr"); + } +} + +static bool IsPivotValid(double data) +{ + if (MathHelper::LessNotEqual(data, 0.0) || (MathHelper::GreatNotEqual(data, 1.0))) { + return false; + } + return true; +} + +static bool IsScaleValid(double data) +{ + if (!MathHelper::GreatNotEqual(data, 0.0)) { + return false; + } + return true; +} + +bool AniWindow::ParseScaleOption(ani_env* env, ani_object scaleOptions, Transform& trans) +{ + double scaleX; + ani_double retScaleX = AniWindowUtils::GetPropertyDoubleObject(env, "x", scaleOptions, scaleX); + if (retScaleX == ANI_OK) { + if (!IsScaleValid(scaleX)) { + return false; + } + trans.scaleX_ = scaleX; + } + + double scaleY; + ani_double retScaleY = AniWindowUtils::GetPropertyDoubleObject(env, "y", scaleOptions, scaleY); + if (retScaleY == ANI_OK) { + if (!IsScaleValid(scaleY)) { + return false; + } + trans.scaleY_ = scaleY; + } + + double pivotX; + ani_double retPivotX = AniWindowUtils::GetPropertyDoubleObject(env, "pivotX", scaleOptions, pivotX); + if (retPivotX == ANI_OK) { + if (!IsPivotValid(pivotX)) { + return false; + } + trans.pivotX_ = pivotX; + } + + double pivotY; + ani_double retPivotY = AniWindowUtils::GetPropertyDoubleObject(env, "pivotY", scaleOptions, pivotY); + if (retPivotY == ANI_OK) { + if (!IsPivotValid(pivotY)) { + return false; + } + trans.pivotY_ = pivotY; + } + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + return true; +} + +void AniWindow::OnScale(ani_env* env, ani_object scaleOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + if (!Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + + if (!WindowHelper::IsSystemWindow(window->GetType())) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Scale is not allowed since window is not system window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + auto trans = window->GetTransform(); + if (!ParseScaleOption(env, scaleOptions, trans)) { + TLOGE(WmsLogTag::WMS_ANIMATION, + "[ANI] PivotX or PivotY should between 0.0 ~ 1.0, scale should greater than 0.0"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTransform(trans)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Window Scale failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGNI(WmsLogTag::WMS_ANIMATION, "[ANI] Window [%{public}u, %{public}s] Scale end", + window->GetWindowId(), window->GetWindowName().c_str()); + TLOGNI(WmsLogTag::WMS_ANIMATION, + "[ANI] scaleX=%{public}f, scaleY=%{public}f, pivotX=%{public}f pivotY=%{public}f", + trans.scaleX_, trans.scaleY_, trans.pivotX_, trans.pivotY_); +} + +void AniWindow::Translate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object translateOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] Set window Translate in"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnTranslate(env, translateOptions); + } else { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] aniWindow is nullptr"); + } +} + +bool AniWindow::ParseTranslateOption(ani_env* env, ani_object translateOptions, Transform& trans) +{ + double translateX; + ani_double retTranslateX = AniWindowUtils::GetPropertyDoubleObject(env, "x", translateOptions, translateX); + if (retTranslateX == ANI_OK) { + trans.translateX_ = translateX; + } + + double translateY; + ani_double retTranslateY = AniWindowUtils::GetPropertyDoubleObject(env, "y", translateOptions, translateY); + if (retTranslateY == ANI_OK) { + trans.translateY_ = translateY; + } + + double translateZ; + ani_double retTranslateZ = AniWindowUtils::GetPropertyDoubleObject(env, "z", translateOptions, translateZ); + if (retTranslateZ == ANI_OK) { + trans.translateZ_ = translateZ; + } + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + return true; +} + +void AniWindow::OnTranslate(ani_env* env, ani_object translateOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + if (!Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + + if (!WindowHelper::IsSystemWindow(window->GetType())) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Translate is not allowed since window is not system window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + auto trans = window->GetTransform(); + if (!ParseTranslateOption(env, translateOptions, trans)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTransform(trans)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Window Translate failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGNI(WmsLogTag::WMS_ANIMATION, "[ANI] Window [%{public}u, %{public}s] Translate end, " + "translateX=%{public}f, translateY=%{public}f, translateZ=%{public}f", + window->GetWindowId(), window->GetWindowName().c_str(), + trans.translateX_, trans.translateY_, trans.translateZ_); +} + +void AniWindow::Rotate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object rotateOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] Set window Rotate in"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnRotate(env, rotateOptions); + } else { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] aniWindow is nullptr"); + } +} + +bool AniWindow::ParseRotateOption(ani_env* env, ani_object rotateOptions, Transform& trans) +{ + double pivotX; + ani_double retPivotX = AniWindowUtils::GetPropertyDoubleObject(env, "pivotX", rotateOptions, pivotX); + if (retPivotX == ANI_OK) { + if (!IsPivotValid(pivotX)) { + return false; + } + trans.pivotX_ = pivotX; + } + + double pivotY; + ani_double retPivotY = AniWindowUtils::GetPropertyDoubleObject(env, "pivotY", rotateOptions, pivotY); + if (retPivotY == ANI_OK) { + if (!IsPivotValid(pivotY)) { + return false; + } + trans.pivotY_ = pivotY; + } + + double rotationX; + ani_double retRotationX = AniWindowUtils::GetPropertyDoubleObject(env, "x", rotateOptions, rotationX); + if (retRotationX == ANI_OK) { + trans.rotationX_ = rotationX; + } + + double rotationY; + ani_double retRotationY = AniWindowUtils::GetPropertyDoubleObject(env, "y", rotateOptions, rotationY); + if (retRotationY == ANI_OK) { + trans.rotationY_ = rotationY; + } + + double rotationZ; + ani_double retRotationZ = AniWindowUtils::GetPropertyDoubleObject(env, "z", rotateOptions, rotationZ); + if (retRotationZ == ANI_OK) { + trans.rotationZ_ = rotationZ; + } + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + return true; +} + +void AniWindow::OnRotate(ani_env* env, ani_object rotateOptions) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + if (!Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + + if (!WindowHelper::IsSystemWindow(window->GetType())) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Rotate is not allowed since window is not system window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + // cannot use sync task since next transform base on current transform + auto trans = window->GetTransform(); + if (!ParseRotateOption(env, rotateOptions, trans)) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] PivotX or PivotY should between 0.0 ~ 1.0"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTransform(trans)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Window Translate failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGNI(WmsLogTag::WMS_ANIMATION, "[ANI] Window [%{public}u, %{public}s] Rotate end", + window->GetWindowId(), window->GetWindowName().c_str()); + TLOGNI(WmsLogTag::WMS_ANIMATION, + "[ANI] rotateX=%{public}f, rotateY=%{public}f, rotateZ=%{public}f pivotX=%{public}f pivotY=%{public}f", + trans.rotationX_, trans.rotationY_, trans.rotationZ_, trans.pivotX_, trans.pivotY_); +} + +void AniWindow::SetShadow(ani_env* env, ani_object obj, ani_long nativeObj, ani_double radius, + ani_string color, ani_object offsetX, ani_object offsetY) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] Set window Shadow in"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnSetShadow(env, radius, color, offsetX, offsetY); + } else { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnSetShadow(ani_env* env, ani_double radius, ani_string color, ani_object offsetX, ani_object offsetY) +{ + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + WmErrorCode ret = WmErrorCode::WM_OK; + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSystemWindow(window->GetType()) && + !WindowHelper::IsSubWindow(window->GetType())) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + + double radiusValue = static_cast(radius); + if (MathHelper::LessNotEqual(radiusValue, 0.0)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetShadowRadius(radiusValue)); + std::string colorValue = ""; + if (ret == WmErrorCode::WM_OK && ANI_OK == AniWindowUtils::GetStdString(env, color, colorValue)) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetShadowColor(colorValue)); + } + + double offsetXValue = 0.0; + if (ret == WmErrorCode::WM_OK && ANI_OK == AniWindowUtils::GetDoubleObject(env, offsetX, offsetXValue)) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetShadowOffsetX(offsetXValue)); + } + + double offsetYValue = 0.0; + if (ret == WmErrorCode::WM_OK && ANI_OK == AniWindowUtils::GetDoubleObject(env, offsetY, offsetYValue)) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetShadowOffsetY(offsetYValue)); + } + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] Set Window Shadow failed"); + AniWindowUtils::AniThrowError(env, ret); + } + TLOGNI(WmsLogTag::WMS_ANIMATION, "[ANI] Window [%{public}u, %{public}s] Set Window Shadow end, " + "radius=%{public}f, color=%{public}s, offsetX=%{public}f offsetY=%{public}f", + window->GetWindowId(), window->GetWindowName().c_str(), + radiusValue, colorValue.c_str(), offsetXValue, offsetYValue); } void AniWindow::SetWindowPrivacyMode(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isPrivacyMode) @@ -1099,6 +1496,16 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindow::UnregisterWindowCallback)}, + ani_native_function {"opacity", "JD:V", + reinterpret_cast(AniWindow::Opacity)}, + ani_native_function {"scale", "JL@ohos/window/window/ScaleOptions;:V", + reinterpret_cast(AniWindow::Scale)}, + ani_native_function {"translate", "JL@ohos/window/window/TranslateOptions;:V", + reinterpret_cast(AniWindow::Translate)}, + ani_native_function {"rotate", "JL@ohos/window/window/RotateOptions;:V", + reinterpret_cast(AniWindow::Rotate)}, + ani_native_function {"setShadow", "JDLstd/core/String;Lstd/core/Double;Lstd/core/Double;:V", + reinterpret_cast(AniWindow::SetShadow)}, }; if ((ret = env->Class_BindNativeMethods(cls, methods.data(), methods.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u", ret); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 839dbb296c..43f96a37a7 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -67,6 +67,96 @@ ani_status AniWindowUtils::GetStdStringVector(ani_env* env, ani_object ary, std: return ANI_OK; } +ani_status AniWindowUtils::GetPropertyIntObject(ani_env* env, const char* propertyName, + ani_object object, int32_t& result) +{ + ani_ref int_ref; + ani_status ret = env->Object_GetPropertyByName_Ref(object, propertyName, &int_ref); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed, ret : %{public}u", + propertyName, static_cast(ret)); + return ret; + } + + ani_boolean isUndefined; + if (ANI_OK != env->Reference_IsUndefined(int_ref, &isUndefined)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed", propertyName); + return ret; + } + + if (isUndefined) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] %{public}s is Undefined Now", propertyName); + return ret; + } + + ani_int int_value; + if (ANI_OK != env->Object_CallMethodByName_Int(static_cast(int_ref), "intValue", nullptr, &int_value)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed", propertyName); + return ret; + } + result = static_cast(int_value); + TLOGI(WmsLogTag::DEFAULT, "[ANI] %{public}s is: %{public}u", propertyName, result); + return ret; +} + +ani_status AniWindowUtils::GetPropertyDoubleObject(ani_env* env, const char* propertyName, + ani_object object, double& result) +{ + ani_ref double_ref; + ani_status ret = env->Object_GetPropertyByName_Ref(object, propertyName, &double_ref); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed, ret : %{public}u", + propertyName, static_cast(ret)); + return ret; + } + + ani_boolean isUndefined; + if (ANI_OK != env->Reference_IsUndefined(double_ref, &isUndefined)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed", propertyName); + return ret; + } + + if (isUndefined) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] %{public}s is Undefined Now", propertyName); + return ret; + } + + ani_double double_value; + if (ANI_OK != env->Object_CallMethodByName_Double(static_cast(double_ref), + "doubleValue", nullptr, &double_value)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed", propertyName); + return ret; + } + result = static_cast(double_value); + TLOGI(WmsLogTag::DEFAULT, "[ANI] %{public}s is: %{public}f", propertyName, result); + return ret; +} + +ani_status AniWindowUtils::GetDoubleObject(ani_env* env, ani_object double_object, double& result) +{ + ani_boolean isUndefined; + ani_status isUndefinedRet = env->Reference_IsUndefined(double_object, &isUndefined); + if (ANI_OK != isUndefinedRet) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Check double_object isUndefined fail"); + return isUndefinedRet; + } + + if (isUndefined) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] CallMeWithOptionalDouble Not Pass Value"); + return ANI_INVALID_ARGS; + } + + ani_double double_value; + ani_status ret = env->Object_CallMethodByName_Double(double_object, "doubleValue", nullptr, &double_value); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_CallMethodByName_Double Failed!"); + return ret; + } + result = static_cast(double_value); + TLOGI(WmsLogTag::DEFAULT, "[ANI] double result is: %{public}f", result); + return ret; +} + ani_status AniWindowUtils::NewAniObjectNoParams(ani_env* env, const char* cls, ani_object* object) { ani_class aniClass; -- Gitee From 587994b0f50f19f95e5fb760f0f6a72c897bf344 Mon Sep 17 00:00:00 2001 From: xuzihan129 Date: Tue, 8 Jul 2025 17:15:15 +0800 Subject: [PATCH 004/109] =?UTF-8?q?=E4=BF=AE=E6=94=B9else=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzihan129 --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 6e42bf6d16..66ee821ea1 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1405,8 +1405,7 @@ export class WindowInternal implements Window { taskpool.execute((): void => { if (presentation == undefined) { this.maximize(this.nativeObj, MaximizePresentation.ENTER_IMMERSIVE as int); - } - else { + } else { this.maximize(this.nativeObj, presentation as int); } }).then((ret: NullishType) :void => { -- Gitee From 480f59c2ab23e9dac8575f95a20668b5c77b8f13 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 8 Jul 2025 22:41:11 +0800 Subject: [PATCH 005/109] sync from 0328 Signed-off-by: wangzilin --- interfaces/kits/ani/window_runtime/BUILD.gn | 1 + .../window_stage_ani/ets/@ohos.window.ets | 1017 ++++++++++++++-- .../window_stage_ani/ets/window_entry.ets | 18 + .../window_stage_ani/include/ani_window.h | 71 +- .../include/ani_window_listener.h | 6 +- .../include/ani_window_manager.h | 24 +- .../include/ani_window_register_manager.h | 18 +- .../include/ani_window_stage.h | 19 +- .../include/ani_window_utils.h | 5 + .../include/idl_window_common.h | 1 + .../window_stage_ani/src/ani_err_utils.cpp | 21 +- .../window_stage_ani/src/ani_window.cpp | 1058 ++++++++++++++++- .../src/ani_window_listener.cpp | 196 +++ .../src/ani_window_manager.cpp | 243 +++- .../src/ani_window_register_manager.cpp | 209 ++-- .../window_stage_ani/src/ani_window_stage.cpp | 301 ++++- .../window_stage_ani/src/ani_window_utils.cpp | 188 ++- 17 files changed, 3059 insertions(+), 337 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index ba3ad2c45f..3b275ea3ce 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -78,6 +78,7 @@ ohos_shared_library("windowstageani_kit") { "hilog:libhilog", "hitrace:hitrace_meter", "image_framework:image", + "image_framework:image_ani", "image_framework:image_native", "ipc:ipc_napi", "ipc:ipc_single", diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c15bb95ebb..4fdd82e411 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -16,16 +16,20 @@ import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant'; import { AsyncCallback, BusinessError, Callback } from '@ohos.base'; import { LocalStorage } from '@ohos.arkui.stateManagement'; import { UIContext } from '@ohos.arkui.UIContext'; +import image from '@ohos.multimedia.image'; import BaseContext from 'application.BaseContext'; +import hilog from '@ohos.hilog'; import { ColorMetrics } from '@ohos.arkui.node'; - export type AsyncCallbackVoid = (err: BusinessError) => void; export type WindowEventCallback = (data: window.WindowEventType) => void; +export type WindowRectCallback = (data: window.Rect) => void; export type WindowSizeCallback = (data: window.Size) => void; export type WindowStatusCallback = (data: window.WindowStatusType) => void; export type KeyboardHeightChangeCallback = (data: number) => void; export type KeyboardDidShowOrHideCallback = (data: window.KeyboardInfo) => void; - +export type WindowVoidCallback = () => void; +const DOMAIN = 0x4200; +const TAG = '[ANI]'; namespace window { export interface Size { /** @@ -320,6 +324,108 @@ namespace window { bottomRect: Rect; } + /** + * System bar tint of region + * + * @interface SystemBarRegionTint + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + export interface SystemBarRegionTint { + /** + * System bar type + * + * @type { WindowType } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + type: number; + + /** + * The visibility of system bar + * + * @type { ?boolean } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + isEnable: boolean; + + /** + * The region of system bar + * + * @type { ?Rect } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + region: Rect; + + /** + * The background color of the system bar. + * + * @type { ?string } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + backgroundColor: string; + + /** + * The content color of the system bar. + * + * @type { ?string } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + contentColor: string; + } + + export class SystemBarRegionTintInternal implements SystemBarRegionTint { + type: number; + isEnable: boolean; + region: Rect; + backgroundColor: string; + contentColor: string; + } + + /** + * System bar tint state for systemui + * + * @interface SystemBarTintState + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + export interface SystemBarTintState { + /** + * Id of display + * + * @type { number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + displayId: number; + /** + * Region tint of systembar + * + * @type { Array } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @systemapi Hide this for inner system use. + * @since 8 + */ + regionTint: Array; + } + + export class SystemBarTintStateInternal implements SystemBarTintState { + displayId: number; + regionTint: Array; + } + export interface Rect { /** * The left of the Rect. @@ -1130,6 +1236,92 @@ export interface WindowLimits { minHeight: number; } +/** + * Rectangular area of the title buttons relative to the upper right corner of the window. + * + * @interface TitleButtonRect + * @syscap SystemCapability.Window.SessionManager + * @since 11 + */ + /** + * Rectangular area of the title buttons relative to the upper right corner of the window. + * + * @interface TitleButtonRect + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + export interface TitleButtonRect { + + /** + * The right of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @since 11 + */ + /** + * The right of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + right: number; + + /** + * The top of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @since 11 + */ + /** + * The top of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + top: number; + + /** + * The width of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @since 11 + */ + /** + * The width of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + width: number; + + /** + * The height of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @since 11 + */ + /** + * The height of the Rect. + * + * @type { number } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + height: number; + } + /** * The decor button style of the window. * @@ -1187,6 +1379,44 @@ export interface WindowTitleButtonVisibleParam { isCloseButtonVisible: boolean; } +export interface TitleButtonVisibleParam { + isMaximizeVisible: boolean; + isMinimizeVisible: boolean; + isSplitVisible: boolean; + isCloseVisible: boolean; +} + +export interface GetWindowsByCoordinateParam { + displayId: number; + windowNumber: number; + x: number; + y: number; +} + +/** + * The information of keyboard + * + * @interface KeyboardInfo + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 18 + */ +export interface KeyboardInfo { + /** + * The position and size of the keyboard + * + * @type { Rect } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 18 + */ + rect: Rect; +} + +export class KeyboardInfoInternal implements KeyboardInfo { + rect: Rect; +} + /** * Describes the scale Transition Options of window * @@ -1205,7 +1435,7 @@ export interface ScaleOptions { * @since 9 */ x?: number; - + /** * The scale param of y direction. Default is 1.f * @@ -1215,7 +1445,7 @@ export interface ScaleOptions { * @since 9 */ y?: number; - + /** * The scale param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f * @@ -1225,7 +1455,7 @@ export interface ScaleOptions { * @since 9 */ pivotX?: number; - + /** * The scale param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f * @@ -1243,7 +1473,7 @@ export class ScaleOptionsInternal implements ScaleOptions { pivotX?: number; pivotY?: number; } - + /** * Describes the rotate Transition Options of window * @@ -1262,7 +1492,7 @@ export interface RotateOptions { * @since 9 */ x?: number; - + /** * The rotate degree of y direction. Default value is 0.f * @@ -1272,7 +1502,7 @@ export interface RotateOptions { * @since 9 */ y?: number; - + /** * The rotate degree of z direction. Default value is 0.f * @@ -1282,7 +1512,7 @@ export interface RotateOptions { * @since 9 */ z?: number; - + /** * The param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f * @@ -1292,7 +1522,7 @@ export interface RotateOptions { * @since 9 */ pivotX?: number; - + /** * The param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f * @@ -1311,7 +1541,7 @@ export class RotateOptionsInternal implements RotateOptions { pivotX?: number; pivotY?: number; } - + /** * Describes the translate Transition Options of window * @@ -1330,7 +1560,7 @@ export interface TranslateOptions { * @since 9 */ x?: number; - + /** * The translate pixel param of y direction. Default is 0.f * @@ -1340,7 +1570,7 @@ export interface TranslateOptions { * @since 9 */ y?: number; - + /** * The translate pixel param of z direction. Default is 0.f * @@ -1358,76 +1588,132 @@ export class TranslateOptionsInternal implements TranslateOptions { z?: number; } -/** - * The information of keyboard - * - * @interface KeyboardInfo - * @syscap SystemCapability.Window.SessionManager - * @atomicservice - * @since 18 - */ -export interface KeyboardInfo { - /** - * The position and size of the keyboard - * - * @type { Rect } - * @syscap SystemCapability.Window.SessionManager - * @atomicservice - * @since 18 - */ - rect: Rect; -} - -export class KeyboardInfoInternal implements KeyboardInfo { - rect: Rect; -} +export native function windowDestroyCallback(nativeObj: long): void; +let windowDestroyRegister = new FinalizationRegistry(windowDestroyCallback); export class WindowStageInternal implements WindowStage { static { loadLibrary('windowstageani_kit.z') } - private nativeObj : long; + private nativeObj: long = 0; setNativeObj(nativeObj: long):void { + if (!this.nativeObj) { + windowDestroyRegister.register(this, this.nativeObj); + } this.nativeObj = nativeObj; } + public native setWindowRectAutoSave(nativeObj: long, enabled: boolean, isSaveBySpecifiedFlag: boolean): void; + public native isWindowRectAutoSave(nativeObj: long): boolean; + public native removeStartingWindow(nativeObj: long): void; + public native loadContentSync(nativeObj: long, path: string, storage?: LocalStorage): void; public native loadContent(nativeObj:long, path: String): int; public native disableWindowDecorSync(nativeObj:long): void; public native setShowOnLockScreenSync(nativeObj:long, showOnLockScreen: boolean): void; public native getMainWindowSync(nativeObj: long): Window; + native onSync(nativeObj: long, eventType: 'windowStageEvent', callback: Object): void; + native offSync(nativeObj: long, eventType: 'windowStageEvent', callback?: Object): void; - public loadContent(path: string, callback: AsyncCallback): void { - // uicontent not support taskpool, must use ui thread - let ret = this.loadContent(this.nativeObj, String(path)); - if (ret == WMError_WM_DO_NOTHING) { - throw {code: WmErrorCode_WM_ERROR_STAGE_ABNORMALLY, message: - "This window state is abnormal."} as BusinessError; - } else if (ret == WMError_WM_ERROR_INVALID_PARAM) { - throw {code: WmErrorCode_WM_ERROR_INVALID_PARAM, message: - "Parameter error. Possible cause: 1. Mandatory parameters are left unspecified; " + - "2. Incorrect parameter types."} as BusinessError; - } - callback({code: WmErrorCode_WM_OK, message: ""} as BusinessError, undefined); + public setWindowRectAutoSave(enabled: boolean, isSaveBySpecifiedFlag: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowRectAutoSave(this.nativeObj, enabled, isSaveBySpecifiedFlag); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); } - public loadContentByName(name: string, callback: AsyncCallbackVoid): void { - let ret = this.loadContent(this.nativeObj, name); + public setWindowRectAutoSave(enabled: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowRectAutoSave(this.nativeObj, enabled, false); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); } - - public disableWindowDecor(): void { - this.disableWindowDecorSync(this.nativeObj); + + public isWindowRectAutoSave(): Promise { + return new Promise((resolve: (value: boolean) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): boolean => { + return this.isWindowRectAutoSave(this.nativeObj); + }).then((ret: NullishType): void => { + resolve(ret as boolean); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); } - public setShowOnLockScreen(showOnLockScreen: boolean): void { - this.setShowOnLockScreenSync(this.nativeObj, showOnLockScreen); + public removeStartingWindow(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.removeStartingWindow(this.nativeObj); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); } - public getMainWindowSync(): Window { - let ret = this.getMainWindowSync(this.nativeObj); + public loadContent(path: string, storage: LocalStorage, callback: AsyncCallback): void { + try { + this.loadContentSync(this.nativeObj, path, storage); + callback(new BusinessError(), undefined); + } catch (err: Error) { + callback(err as BusinessError, undefined); + } + } + + public loadContent(path: string, storage?: LocalStorage): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + try { + this.loadContentSync(this.nativeObj, path, storage); + resolve(undefined); + } catch (err: Error) { + reject(err as BusinessError); + } + }); + } + + public loadContent(path: string, callback: AsyncCallback): void { + // uicontent not support taskpool, must use ui thread + let ret = this.loadContent(this.nativeObj, String(path)); + if (ret == WMError_WM_DO_NOTHING) { + throw {code: WmErrorCode_WM_ERROR_STAGE_ABNORMALLY, message: + "This window state is abnormal."} as BusinessError; + } else if (ret == WMError_WM_ERROR_INVALID_PARAM) { + throw {code: WmErrorCode_WM_ERROR_INVALID_PARAM, message: + "Parameter error. Possible cause: 1. Mandatory parameters are left unspecified; " + + "2. Incorrect parameter types."} as BusinessError; + } + callback({code: WmErrorCode_WM_OK, message: ""} as BusinessError, undefined); + } + + public loadContentByName(name: string, callback: AsyncCallbackVoid): void { + let ret = this.loadContent(this.nativeObj, name); + } + + public disableWindowDecor(): void { + this.disableWindowDecorSync(this.nativeObj); + } + + public setShowOnLockScreen(showOnLockScreen: boolean): void { + this.setShowOnLockScreenSync(this.nativeObj, showOnLockScreen); + } + + public getMainWindowSync(): Window { + let ret = this.getMainWindowSync(this.nativeObj); return ret; } public getMainWindow(): Promise { - return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void ) => { + return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { taskpool.execute((): Window => { let window = this.getMainWindowSync(this.nativeObj); return window; @@ -1448,9 +1734,23 @@ export class WindowStageInternal implements WindowStage { }).catch((err: NullishType) => { }); } + + public on(eventType: 'windowStageEvent', callback: Callback): void { + this.onSync(this.nativeObj, eventType, callback); + } + + public off(eventType: 'windowStageEvent', callback?: Callback): void { + this.offSync(this.nativeObj, eventType, callback); + } } export interface WindowStage { + setWindowRectAutoSave(enabled: boolean): Promise; + isWindowRectAutoSave(): Promise; + setWindowRectAutoSave(enabled: boolean, isSaveBySpecifiedFlag: boolean): Promise; + removeStartingWindow(): Promise; + loadContent(path: string, storage: LocalStorage, callback: AsyncCallback): void; + loadContent(path: string, storage?: LocalStorage): Promise; loadContent(path: string, callback: AsyncCallback): void; loadContentByName(name: string, callback: AsyncCallbackVoid): void; getMainWindowSync(): Window; @@ -1458,6 +1758,8 @@ export interface WindowStage { getMainWindow(callback: AsyncCallback): void; disableWindowDecor(): void; setShowOnLockScreen(showOnLockScreen: boolean): void; + on(eventType: 'windowStageEvent', callback: Callback): void; + off(eventType: 'windowStageEvent', callback?: Callback): void; } export class WindowInternal implements Window { @@ -1469,6 +1771,21 @@ export class WindowInternal implements Window { this.nativeObj = nativeObj; } + private native setFollowParentWindowLayoutEnabled(nativeObj: long, enabled: boolean): void; + private native setWindowDelayRaiseOnDrag(nativeObj: long, isEnabled: boolean): void; + private native getParentWindow(nativeObj: long): Window; + private native getWindowDecorVisible(nativeObj: long): boolean; + private native stopMoving(nativeObj: long): void; + private native setParentWindow(nativeObj: long, windowId: double): void; + private native setWindowTitle(nativeObj: long, titleName: string): void; + private native getDecorButtonStyle(nativeObj: long): DecorButtonStyle; + private native getTitleButtonRect(nativeObj: long): TitleButtonRect; + private native setTitleButtonVisible(nativeObj: long, visibleParam: TitleButtonVisibleParam): void; + private native setWindowTitleMoveEnabled(nativeObj: long, enabled: boolean): void; + private native setWindowTopmost(nativeObj: long, isWindowTopmost: boolean): void; + private native setTitleAndDockHoverShown(nativeObj: long, isTitleHoverShown: boolean, isDockHoverShown: boolean): void; + private native restore(nativeObj: long): void; + private native startMoving(nativeObj: long): void; private native startMoveWindowWithCoordinate(nativeObj: long, offsetX: double, offsetY: double): void; private native setWindowTitleButtonVisible(nativeObj: long, visibleParam: WindowTitleButtonVisibleParam): void; @@ -1476,6 +1793,10 @@ export class WindowInternal implements Window { private native getWindowStatus(nativeObj: long): int; private native minimize(nativeObj: long): void; private native maximize(nativeObj: long, presentation: int): void; + private native resize(nativeObj: long, width: double, height: double): int; + private native moveWindowTo(nativeObj: long, x: double, y: double): int; + private native getGlobalRect(nativeObj:long): Rect; + private native getWindowDecorHeight(nativeObj:long): double; private native setWindowBackgroundColor(nativeObj: long, color: string): int; private native setImmersiveModeEnabledState(nativeObj: long, enable: boolean): int; @@ -1487,6 +1808,14 @@ export class WindowInternal implements Window { private native setWindowLayoutFullScreen(nativeObj: long, isLayoutFullScreen: boolean): int; private native setWindowSystemBarProperties(nativeObj: long, systemBarProperties: SystemBarProperties): int; private native setSpecificSystemBarEnabled(nativeObj: long, name: String, enable: boolean, enableAnimation: boolean): int; + private native snapshot(nativeObj: long): image.PixelMap; + private native hideNonSystemFloatingWindows(nativeObj: long, shouldHide: boolean): void; + private native opacity(nativeObj: long, opacity: number): void; + private native scale(nativeObj: long, scaleOptions: ScaleOptions): void; + private native translate(nativeObj: long, translateOptions: TranslateOptions): void; + private native rotate(nativeObj: long, rotateOptions: RotateOptions): void; + private native setShadow(nativeObj: long, radius: number, color?: string, + offsetX?: number, offsetY?: number): void; private native setWindowColorSpaceSync(nativeObj: long, colorSpace: int): void; private native setPreferredOrientationSync(nativeObj: long, orientation: int): void; @@ -1500,15 +1829,145 @@ export class WindowInternal implements Window { private native getUIContextSync(nativeObj: long): UIContext; private native getWindowAvoidAreaSync(nativeObj: long, type: int): AvoidArea; private native setWaterMarkFlagSync(nativeObj: long, enable: boolean): void; + private native showWindowSync(nativeObj: long): void; + private native destroyWindowSync(nativeObj: long): void; + private native isWindowShowingSync(nativeObj: long): boolean; + private native hideWithAnimationSync(nativeObj: long): void; + private native showWithAnimationSync(nativeObj: long): void; + private native setWindowFocusableSync(nativeObj: long, isFocusable: boolean): void; + + private native setWindowTouchableSync(nativeObj: long, enable: boolean): void; + private native onNoInteractionDetected(nativeObj: long, type: string, timeout: number, callback: Object): void; private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; - private native opacity(nativeObj: long, opacity: number): void; - private native scale(nativeObj: long, scaleOptions: ScaleOptions): void; - private native translate(nativeObj: long, translateOptions: TranslateOptions): void; - private native rotate(nativeObj: long, rotateOptions: RotateOptions): void; - private native setShadow(nativeObj: long, radius: number, color?: string, - offsetX?: number, offsetY?: number): void; + + public setFollowParentWindowLayoutEnabled(enabled: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.setFollowParentWindowLayoutEnabled(this.nativeObj, enabled); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public setWindowDelayRaiseOnDrag(isEnabled: boolean): void { + this.setWindowDelayRaiseOnDrag(this.nativeObj, isEnabled); + } + + public getParentWindow(): Window { + return this.getParentWindow(this.nativeObj); + } + + public getWindowDecorVisible(): boolean { + return this.getWindowDecorVisible(this.nativeObj); + } + + public stopMoving(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.stopMoving(this.nativeObj); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public setParentWindow(windowId: number): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.setParentWindow(this.nativeObj, windowId); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public setWindowTitle(titleName: string): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.setWindowTitle(this.nativeObj, titleName); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public getDecorButtonStyle(): DecorButtonStyle { + return this.getDecorButtonStyle(this.nativeObj); + } + + public getTitleButtonRect(): TitleButtonRect { + return this.getTitleButtonRect(this.nativeObj); + } + + public setTitleButtonVisible(isMaximizeVisible: boolean, isMinimizeVisible: boolean, + isSplitVisible: boolean): void { + let visibleParam: window.TitleButtonVisibleParam = { + isMaximizeVisible: isMaximizeVisible, + isMinimizeVisible: isMinimizeVisible, + isSplitVisible: isSplitVisible, + isCloseVisible: true, + }; + this.setTitleButtonVisible(this.nativeObj, visibleParam); + } + + public setWindowTitleMoveEnabled(enabled: boolean): void { + this.setWindowTitleMoveEnabled(this.nativeObj, enabled); + } + + public setWindowTopmost(isWindowTopmost: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.setWindowTopmost(this.nativeObj, isWindowTopmost); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public setTitleAndDockHoverShown(isTitleHoverShown?: boolean, isDockHoverShown?: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + let titleShow: boolean = true; + if (isTitleHoverShown != undefined) { + titleShow = isTitleHoverShown; + } + let dockShow: boolean = true; + if (isDockHoverShown != undefined) { + dockShow = isDockHoverShown; + } + this.setTitleAndDockHoverShown(this.nativeObj, titleShow, dockShow); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } + + public restore(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.restore(this.nativeObj); + }).then((ret: NullishType): void => { + resolve(undefined); + }).catch((err: NullishType): void => { + reject(err as BusinessError); + }); + }); + } public startMoving(): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { @@ -1582,7 +2041,8 @@ export class WindowInternal implements Window { taskpool.execute((): void => { if (presentation == undefined) { this.maximize(this.nativeObj, MaximizePresentation.ENTER_IMMERSIVE as int); - } else { + } + else { this.maximize(this.nativeObj, presentation as int); } }).then((ret: NullishType) :void => { @@ -1592,7 +2052,56 @@ export class WindowInternal implements Window { }); }); } + + public resize(width: double, height: double): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { + taskpool.execute((): void => { + this.resize(this.nativeObj, width, height); + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + public moveWindowTo(x: double, y: double): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { + taskpool.execute((): void => { + this.moveWindowTo(this.nativeObj, x, y); + }).then((ret: NullishType) :void => { + resolve(undefined); + }).catch((err: NullishType) :void => { + reject(err as BusinessError); + }); + }); + } + + public resize(width: double, height: double, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.resize(this.nativeObj, width, height); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public moveWindowTo(x: double, y: double, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.moveWindowTo(this.nativeObj, x, y); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public getGlobalRect(): Rect { + let ret = this.getGlobalRect(this.nativeObj); + return ret; + } + public getWindowDecorHeight(): number { let ret = this.getWindowDecorHeight(this.nativeObj); return ret; @@ -1605,7 +2114,7 @@ export class WindowInternal implements Window { } public setBackgroundColor(color: string): Promise { - return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { taskpool.execute((): void => { this.setWindowBackgroundColor(this.nativeObj, color); }).then((ret: NullishType) :void => { @@ -1646,7 +2155,7 @@ export class WindowInternal implements Window { public getProperties(): Promise { return new Promise((resolve: (value: WindowProperties) => void, - reject: (error: BusinessError) => void ) => { + reject: (error: BusinessError) => void) => { taskpool.execute((): WindowProperties => { let res = this.getProperties(this.nativeObj) as WindowPropertiesInternal; res.type = res.typeInternal as WindowType; @@ -1671,7 +2180,7 @@ export class WindowInternal implements Window { } public isWindowSupportWideGamut(): Promise { - return new Promise((resolve: (value: boolean) => void, reject: (error: BusinessError) => void ) => { + return new Promise((resolve: (value: boolean) => void, reject: (error: BusinessError) => void) => { taskpool.execute((): boolean => { let res = this.isWindowSupportWideGamut(this.nativeObj); return res; @@ -1754,6 +2263,50 @@ export class WindowInternal implements Window { }); } + public snapshot(): Promise { + return new Promise((resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void) => { + taskpool.execute(() => { + return this.snapshot(this.nativeObj); + }).then((ret: NullishType) => { + resolve(ret as image.PixelMap); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public snapshot(callback: AsyncCallback): void { + taskpool.execute(() => { + return this.snapshot(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as image.PixelMap); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public hideNonSystemFloatingWindows(shouldHide: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute(() => { + this.hideNonSystemFloatingWindows(this.nativeObj, shouldHide); + }).then(() => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public hideNonSystemFloatingWindows(shouldHide: boolean, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.hideNonSystemFloatingWindows(this.nativeObj, shouldHide); + }).then(() => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + public setWindowColorSpace(colorSpace: ColorSpace): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { @@ -1915,7 +2468,7 @@ export class WindowInternal implements Window { } public setWindowSystemBarEnable(names: Array<'status' | 'navigation'>): Promise { - return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { taskpool.execute((): void => { this.setWindowSystemBarEnableSync(this.nativeObj, names); }).then((ret: NullishType) => { @@ -1966,16 +2519,52 @@ export class WindowInternal implements Window { }); } - public keepKeyboardOnFocus(keepKeyboardFlag: boolean): void { - this.keepKeyboardOnFocusSync(this.nativeObj, keepKeyboardFlag); + public setWindowFocusable(isFocusable: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowFocusableSync(this.nativeObj, isFocusable); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); } - public on(type: string, callback: Callback): void { - this.onSync(this.nativeObj, type, callback); + public setWindowFocusable(isFocusable: boolean, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.setWindowFocusableSync(this.nativeObj, isFocusable); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); } - public off(type: string, callback?: Callback): void { - this.offSync(this.nativeObj, type, callback); + public keepKeyboardOnFocus(keepKeyboardFlag: boolean): void { + this.keepKeyboardOnFocusSync(this.nativeObj, keepKeyboardFlag); + } + + public setWindowTouchable(enable: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowTouchableSync(this.nativeObj, enable); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public setWindowTouchable(enable: boolean, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.setWindowTouchableSync(this.nativeObj, enable); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); } public opacity(opacity: number): void { @@ -1997,9 +2586,128 @@ export class WindowInternal implements Window { public setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void { this.setShadow(this.nativeObj, radius, color, offsetX, offsetY); } + + public on(type: string, callback: Callback): void { + this.onSync(this.nativeObj, type, callback); + } + + public on(type: 'noInteractionDetected', timeout: number, callback: Callback): void { + this.onNoInteractionDetected(this.nativeObj, type, timeout, callback as WindowVoidCallback); + } + + public off(type: string, callback?: Callback): void { + this.offSync(this.nativeObj, type, callback); + } + + public showWindow(callback: AsyncCallback): void { + taskpool.execute((): void => { + this.showWindowSync(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public showWindow(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.showWindowSync(this.nativeObj); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public destroyWindow(callback: AsyncCallback): void { + taskpool.execute((): void => { + this.destroyWindowSync(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public destroyWindow(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.destroyWindowSync(this.nativeObj); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public isWindowShowing(): boolean { + return this.isWindowShowingSync(this.nativeObj); + } + + public hideWithAnimation(callback: AsyncCallback): void { + taskpool.execute((): void => { + this.hideWithAnimationSync(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public hideWithAnimation(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.hideWithAnimationSync(this.nativeObj); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public showWithAnimation(callback: AsyncCallback): void { + taskpool.execute((): void => { + this.showWithAnimationSync(this.nativeObj); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public showWithAnimation(): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.showWithAnimationSync(this.nativeObj); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } } export interface Window { + setFollowParentWindowLayoutEnabled(enabled: boolean): Promise; + setWindowDelayRaiseOnDrag(isEnabled: boolean): void; + getParentWindow(): Window; + getWindowDecorVisible(): boolean; + stopMoving(): Promise; + setParentWindow(windowId: number): Promise; + setWindowTitle(titleName: string): Promise; + getDecorButtonStyle(): DecorButtonStyle; + getTitleButtonRect(): TitleButtonRect; + setTitleButtonVisible(isMaximizeVisible: boolean, isMinimizeVisible: boolean, isSplitVisible: boolean): void; + setWindowTitleMoveEnabled(enabled: boolean): void; + setWindowTopmost(isWindowTopmost: boolean): Promise; + setTitleAndDockHoverShown(isTitleHoverShown?: boolean, isDockHoverShown?: boolean): Promise; + restore(): Promise; + startMoving(): Promise; startMoving(offsetX: double, offsetY: double): Promise; setWindowTitleButtonVisible(isMaximizeButtonVisible: boolean, isMinimizeButtonVisible: boolean, @@ -2009,6 +2717,11 @@ export interface Window { minimize(callback: AsyncCallback): void; minimize(): Promise; maximize(presentation?: MaximizePresentation): Promise; + resize(width: double, height: double): Promise; + moveWindowTo(x: double, y: double): Promise; + resize(width: double, height: double, callback: AsyncCallback): void; + moveWindowTo(x: double, y: double, callback: AsyncCallback): void; + getGlobalRect(): Rect; getWindowDecorHeight(): double; setWindowBackgroundColor(color: string | ColorMetrics): void; setBackgroundColor(color: string): Promise; @@ -2026,6 +2739,10 @@ export interface Window { setWindowSystemBarProperties(systemBarProperties: SystemBarProperties): Promise; setWindowSystemBarProperties(systemBarProperties: SystemBarProperties, callback: AsyncCallback): void; setSpecificSystemBarEnabled(name: String, enable: boolean, enableAnimation?: boolean): Promise; + snapshot(): Promise; + snapshot(callback: AsyncCallback): void; + hideNonSystemFloatingWindows(shouldHide: boolean): Promise; + hideNonSystemFloatingWindows(shouldHide: boolean, callback: AsyncCallback): void; setWindowColorSpace(colorSpace: ColorSpace): Promise; setWindowColorSpace(colorSpace: ColorSpace, callback: AsyncCallback): void; setPreferredOrientation(orientation: Orientation): Promise; @@ -2047,14 +2764,28 @@ export interface Window { getWindowAvoidArea(type: AvoidAreaType): AvoidArea; setWaterMarkFlag(enable: boolean): Promise; setWaterMarkFlag(enable: boolean, callback: AsyncCallback): void; + showWindow(callback: AsyncCallback): void; + showWindow(): Promise; + destroyWindow(callback: AsyncCallback): void; + destroyWindow(): Promise; + isWindowShowing(): boolean; + hideWithAnimation(callback: AsyncCallback): void; + hideWithAnimation(): Promise; + showWithAnimation(callback: AsyncCallback): void; + showWithAnimation(): Promise; + setWindowFocusable(isFocusable: boolean): Promise; + setWindowFocusable(isFocusable: boolean, callback: AsyncCallback): void; keepKeyboardOnFocus(enable: boolean): void; - on(type: string, callback: Callback): void; - off(type: string, callback?: Callback): void; + setWindowTouchable(isTouchable: boolean): Promise + setWindowTouchable(isTouchable: boolean, callback: AsyncCallback): void opacity(opacity: number): void; scale(scaleOptions: ScaleOptions): void; translate(translateOptions: TranslateOptions): void; rotate(rotateOptions: RotateOptions): void; setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void; + on(type: string, callback: Callback): void; + on(type: 'noInteractionDetected', timeout: number, callback: Callback): void; + off(type: string, callback?: Callback): void; } export native function CreateWindowStage(scene: long): WindowStageInternal; @@ -2062,15 +2793,23 @@ export function CreateWindowStageApi(scene: long): WindowStage { return CreateWi export native function CreateWindow(window: long): WindowInternal; let nativeObj: long; -function setNativeObj(nativeObj: long):void { - nativeObj = nativeObj; +export function setNativeObj(nativeObject: long):void { + hilog.info(DOMAIN, TAG, 'setNativeObj, nativeObject:' + nativeObject); + nativeObj = nativeObject; } +native function getWindowsByCoordinate(nativeObj: long, param: window.GetWindowsByCoordinateParam): Array; native function getLastWindowSync(nativeObj: long, ctx: BaseContext): Window; +native function minimizeAllSync(nativeObj: long, id: number): void; +native function findWindowSync(nativeObj: long, name: string): Window; +native function onSync(nativeObj: long, type: string, callback: object): void; +native function offSync(nativeObj: long, type: string, callback?: object): void; +native function shiftAppWindowFocusSync(nativeObj: long, sourceWindowId: number, targetWindowId: number): void; export function getLastWindow(ctx: BaseContext): Promise { - return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void ) => { + return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { taskpool.execute((): Window => { + hilog.info(DOMAIN, TAG, 'getLastWindow, ctx:' + ctx); return getLastWindowSync(nativeObj, ctx); }).then((ret: NullishType) => { resolve(ret as Window); @@ -2082,6 +2821,7 @@ export function getLastWindow(ctx: BaseContext): Promise { export function getLastWindow(ctx: BaseContext, callback: AsyncCallback): void { taskpool.execute((): Window => { + hilog.info(DOMAIN, TAG, 'getLastWindow, ctx:' + ctx); return getLastWindowSync(nativeObj, ctx); }).then((ret: NullishType) => { callback(new BusinessError(), ret as Window); @@ -2090,11 +2830,121 @@ export function getLastWindow(ctx: BaseContext, callback: AsyncCallback) }); } +export function minimizeAll(id: number): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + minimizeAllSync(nativeObj, id); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function minimizeAll(id: number, callback: AsyncCallback): void { + taskpool.execute((): void => { + minimizeAllSync(nativeObj, id); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); +} + +export function getWindowsByCoordinate(displayId: number, windowNumber?: number, + x?: number, y?: number): Promise> { + return new Promise>((resolve: (value: Array) => void, + reject: (error: BusinessError) => void): void => { + taskpool.execute((): Array => { + let param: window.GetWindowsByCoordinateParam = { + displayId: displayId, + windowNumber: 0, + x: -1, + y: -1 + }; + if (windowNumber != undefined) { + param.windowNumber = windowNumber; + } + if (x != undefined) { + param.x = x; + } + if (y != undefined) { + param.y = y; + } + return getWindowsByCoordinate(nativeObj, param); + }).then((ret: NullishType) => { + resolve(ret as Array); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function findWindow(name: string): Window { + return findWindowSync(nativeObj, name); +} + +export function on(type: string, callback: Callback): void { + onSync(nativeObj, type, callback); +} + +export function off(type: string, callback?: Callback): void { + offSync(nativeObj, type, callback); +} + +function runWindowListenerVoidArgCallBack(cb: object): void { + const func = cb as () => void; + func(); +} + +function runWindowListenerBooleanArgCallBack(cb: object, cbArg: boolean): void { + const func = cb as (cbArg: boolean) => void; + func(cbArg); +} + +function runSystemBarTintChangeCallBack(cb: object, tint: object): void { + const func = cb as (tint: SystemBarTintState) => void; + func(tint as SystemBarTintState); +} + +function runAvoidAreaChangeCallBack(cb: object, area: object, type: int): void { + const func = cb as (data: AvoidAreaOptions) => void; + func({type: type as AvoidAreaType, area: area as AvoidArea}); +} + +export function shiftAppWindowFocus(sourceWindowId: number, targetWindowId: number): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) : void => { + taskpool.execute((): void => { + return shiftAppWindowFocusSync(nativeObj, sourceWindowId, targetWindowId); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +function runWindowDialogTargetCallback(cb: object): void { + const func = cb as () => void; + func(); +} + function runWindowEventCallBack(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowEventType) => void; func(cbArg as WindowEventType); } +function runWindowTouchOutCallback(cb: object): void { + const func = cb as () => void; + func(); +} + +function runWindowRectCallback(cb: object, cbArg: object): void { + const func = cb as (cbArg: Rect) => void; + func(cbArg as Rect); +} + function runWindowSizeCallBack(cb: object, cbArg: object): void { const func = cb as (cbArg: Size) => void; func(cbArg as Size); @@ -2119,6 +2969,11 @@ function runWindowStatusCallBack(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowStatusType) => void; func(cbArg as WindowStatusType); } + +function runWindowNoInteractionCallback(cb: object): void { + const func = cb as () => void; + func(); +} } export default window; \ No newline at end of file diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets index a1a88fc7f0..01b5385677 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets @@ -119,6 +119,24 @@ function main() { w.on('windowStatusChange', cb3); w.off('windowStatusChange', cb3); + let cb4 = (): void => { + console.println(`dialogTargetTouch event`); + }; + w.on('dialogTargetTouch', cb4); + w.off('dialogTargetTouch', cb4); + + let cb5 = (): void => { + console.println(`touchOutside event`); + }; + w.on('touchOutside', cb5); + w.off('touchOutside', cb5); + + let cb6 = (): void => { + console.println(`noInteractionDetected event`); + }; + w.on('noInteractionDetected', cb6); + w.off('noInteractionDetected', cb6); + w.setImmersiveModeEnabledState(false); w.setWindowDecorVisible(false); w.setWindowDecorHeight(100); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index 1efbf06f93..b1043f8a31 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -34,6 +34,8 @@ public: explicit AniWindow(const sptr& window); explicit AniWindow(const std::shared_ptr& window); sptr GetWindow() { return windowToken_; } + ani_ref GetAniRef() { return aniRef_; } + void SetAniRef(const ani_ref& aniRef) { aniRef_ = aniRef; } /* window obj stored in ANI */ static AniWindow* GetWindowObjectFromEnv(ani_env* env, ani_object obj); @@ -45,18 +47,48 @@ public: static void SetUIContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path); static void SetWindowKeepScreenOn(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isKeepScreenOn); static void SetWaterMarkFlag(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enable); + static void SetWindowFocusable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isFocusable); + static void setWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isTouchable); static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path); static void LoadContentNew(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage); static void SetWindowSystemBarEnable(ani_env* env, ani_object obj, ani_long nativeObj, ani_object nameAry); static ani_object GetUIContext(ani_env* env, ani_object obj, ani_long nativeObj); static ani_object GetWindowAvoidArea(ani_env* env, ani_object obj, ani_long nativeObj, ani_int type); + static void RegisterNoInteractionDetectedCallback(ani_env* env, ani_object obj, ani_long nativeObj, + ani_string type, ani_double timeout, ani_ref callback); static void RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); + static void ShowWindow(ani_env* env, ani_object obj, ani_long nativeObj); + static void DestroyWindow(ani_env* env, ani_object obj, ani_long nativeObj); + static ani_boolean IsWindowShowing(ani_env* env, ani_object obj, ani_long nativeObj); + static void HideWithAnimation(ani_env* env, ani_object obj, ani_long nativeObj); + static void ShowWithAnimation(ani_env* env, ani_object obj, ani_long nativeObj); static void KeepKeyboardOnFocus(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean keepKeyboardFlag); + static void Opacity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double opacity); + static void Scale(ani_env* env, ani_object obj, ani_long nativeObj, ani_object scaleOptions); + static void Translate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object translateOptions); + static void Rotate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object rotateOptions); + static void SetShadow(ani_env* env, ani_object obj, ani_long nativeObj, ani_double radius, + ani_string color, ani_object offsetX, ani_object offsetY); + static void Finalizer(ani_env* env, ani_long nativeObj); + void SetFollowParentWindowLayoutEnabled(ani_env* env, ani_boolean enabled); + void SetWindowDelayRaiseOnDrag(ani_env* env, ani_boolean isEnabled); + ani_ref GetParentWindow(ani_env* env); + ani_boolean GetWindowDecorVisible(ani_env* env); + void StopMoving(ani_env* env); + void SetParentWindow(ani_env* env, ani_double windowId); + void SetWindowTitle(ani_env* env, ani_string titleName); + ani_object GetDecorButtonStyle(ani_env* env); + ani_object GetTitleButtonRect(ani_env* env); + void SetTitleButtonVisible(ani_env* env, ani_object titleButtonVisibleParam); + void SetWindowTitleMoveEnabled(ani_env* env, ani_boolean enabled); + void SetWindowTopmost(ani_env* env, ani_boolean isWindowTopmost); + void SetTitleAndDockHoverShown(ani_env* env, ani_boolean isTitleHoverShown, ani_boolean isDockHoverShown); + void Restore(ani_env* env); void StartMoving(ani_env* env); void StartMoveWindowWithCoordinate(ani_env* env, ani_double offsetX, ani_double offsetY); void SetWindowTitleButtonVisible(ani_env* env, ani_object visibleParam); @@ -65,6 +97,10 @@ public: void Minimize(ani_env* env); void HideWindowFunction(ani_env* env, WmErrorCode errCode); void Maximize(ani_env* env, ani_int presentation); + ani_object Resize(ani_env* env, ani_double width, ani_double height); + ani_object MoveWindowTo(ani_env* env, ani_double x, ani_double y); + ani_object GetGlobalRect(ani_env* env); + ani_double GetWindowDecorHeight(ani_env* env); ani_object SetWindowBackgroundColor(ani_env* env, const std::string& color); ani_object SetImmersiveModeEnabledState(ani_env* env, bool enable); @@ -76,36 +112,32 @@ public: void SetSystemBarProperties(ani_env* env, ani_object aniSystemBarProperties); ani_object SetSpecificSystemBarEnabled(ani_env* env, ani_string, ani_boolean enable, ani_boolean enableAnimation); - static void Opacity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double opacity); - static void Scale(ani_env* env, ani_object obj, ani_long nativeObj, ani_object scaleOptions); - static void Translate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object translateOptions); - static void Rotate(ani_env* env, ani_object obj, ani_long nativeObj, ani_object rotateOptions); - static void SetShadow(ani_env* env, ani_object obj, ani_long nativeObj, ani_double radius, - ani_string color, ani_object offsetX, ani_object offsetY); + ani_object Snapshot(ani_env* env); + void HideNonSystemFloatingWindows(ani_env* env, ani_boolean shouldHide); private: void OnSetWindowColorSpace(ani_env* env, ani_int colorSpace); void OnSetPreferredOrientation(ani_env* env, ani_int orientation); void OnSetWindowPrivacyMode(ani_env* env, ani_boolean isPrivacyMode); + void OnSetWindowTouchable(ani_env* env, ani_boolean isTouchable); void OnRecover(ani_env* env); void OnSetUIContent(ani_env* env, ani_string path); void OnSetWindowKeepScreenOn(ani_env* env, ani_boolean isKeepScreenOn); void OnSetWaterMarkFlag(ani_env* env, ani_boolean enable); + void OnSetWindowFocusable(ani_env* env, ani_boolean isFocusable); void OnLoadContent(ani_env* env, ani_string path); void OnLoadContent(ani_env* env, ani_string path, ani_object storage); void OnSetWindowSystemBarEnable(ani_env* env, ani_object nameAry); ani_object OnGetUIContext(ani_env* env); ani_object OnGetWindowAvoidArea(ani_env* env, ani_int type); - void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); + void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_double timeout); void OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); + void OnShowWindow(ani_env* env); + void OnDestroyWindow(ani_env* env); + ani_boolean OnIsWindowShowing(ani_env* env); + void OnHideWithAnimation(ani_env* env); + void OnShowWithAnimation(ani_env* env); void OnKeepKeyboardOnFocus(ani_env* env, ani_boolean keepKeyboardFlag); - bool GetSystemBarStatus(std::map& systemBarProperties, - std::map& systemBarpropertyFlags, - const std::vector& names, sptr& window); - void UpdateSystemBarProperties(std::map& systemBarProperties, - const std::map& systemBarPropertyFlags, sptr windowToken); - WMError SetSystemBarPropertiesByFlags(std::map& systemBarPropertyFlags, - std::map& systemBarProperties, sptr windowToken); void OnOpacity(ani_env* env, ani_double opacity); void OnScale(ani_env* env, ani_object scaleOptions); void OnTranslate(ani_env* env, ani_object translateOptions); @@ -114,16 +146,25 @@ private: static bool ParseScaleOption(ani_env* env, ani_object scaleOptions, Transform& trans); static bool ParseTranslateOption(ani_env* env, ani_object translateOptions, Transform& trans); static bool ParseRotateOption(ani_env* env, ani_object rotateOptions, Transform& trans); + bool GetSystemBarStatus(std::map& systemBarProperties, + std::map& systemBarpropertyFlags, + const std::vector& names, sptr& window); + void UpdateSystemBarProperties(std::map& systemBarProperties, + const std::map& systemBarPropertyFlags, sptr windowToken); + WMError SetSystemBarPropertiesByFlags(std::map& systemBarPropertyFlags, + std::map& systemBarProperties, sptr windowToken); sptr windowToken_ = nullptr; std::unique_ptr registerManager_ = nullptr; + ani_ref aniRef_ = nullptr; }; /* window obj stored in ANI */ AniWindow* GetWindowObjectFromAni(void* aniObj); -ani_object CreateAniWindowObject(ani_env* env, sptr& window); +ani_ref CreateAniWindowObject(ani_env* env, sptr& window); void DropWindowObjectByAni(ani_object obj); ani_status ANI_Window_Constructor(ani_vm *vm, uint32_t *result); +ani_ref FindAniWindowObject(const std::string& windowName); } // namespace Rosen } // namespace OHOS #endif // OHOS_ANI_WINDOW_H diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index d04261153f..3dbbc78a75 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -51,6 +51,7 @@ const std::string WINDOW_TITLE_BUTTON_RECT_CHANGE_CB = "windowTitleButtonRectCha const std::string WINDOW_NO_INTERACTION_DETECT_CB = "noInteractionDetected"; const std::string WINDOW_RECT_CHANGE_CB = "windowRectChange"; const std::string SUB_WINDOW_CLOSE_CB = "subWindowClose"; +const std::string WINDOW_HIGHLIGHT_CHANGE_CB = "windowHighlightChange"; const std::string WINDOW_STAGE_CLOSE_CB = "windowStageClose"; class AniWindowListener : public IWindowChangeListener, @@ -72,12 +73,14 @@ class AniWindowListener : public IWindowChangeListener, public IWindowNoInteractionListener, public IWindowRectChangeListener, public IMainWindowCloseListener, - public ISubWindowCloseListener { + public ISubWindowCloseListener, + public IWindowHighlightChangeListener { public: AniWindowListener(ani_env* env, ani_ref callback, CaseType caseType) : env_(env), aniCallBack_(callback), caseType_(caseType), weakRef_(wptr (this)) {} ~AniWindowListener(); + ani_ref GetAniCallBack() const { return aniCallBack_; } void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) override; void OnSizeChange(Rect rect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr) override; @@ -109,6 +112,7 @@ public: void OnWindowTitleButtonRectChanged(const TitleButtonRect& titleButtonRect) override; void OnRectChange(Rect rect, WindowSizeChangeReason reason) override; void OnSubWindowClose(bool& terminateCloseProcess) override; + void OnWindowHighlightChange(bool isHighlight) override; void OnMainWindowClose(bool& terminateCloseProcess) override; private: diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h index 3c741306b4..16ce5fcac2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h @@ -30,11 +30,29 @@ namespace Rosen { class AniWindowManager { public: - static ani_status AniWindowManagerInit(ani_env* env, ani_namespace windowNameSpace); - static ani_object GetLastWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_object context); + explicit AniWindowManager(); + + static ani_status AniWindowManagerInit(ani_env* env); + static ani_object WindowStageCreate(ani_env* env, ani_long scene); + static ani_object GetWindowsByCoordinate(ani_env* env, ani_long nativeObj, ani_object getWindowsParam); + static ani_ref GetLastWindow(ani_env* env, ani_long nativeObj, ani_object context); + static ani_ref FindWindow(ani_env* env, ani_long nativeObj, ani_string windowName); + static void MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId); + static void RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); + static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); + static void ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, + ani_double sourceWindowId, ani_double targetWindowId); private: - ani_object OnGetLastWindow(ani_env* env, ani_object context); + ani_object OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam); + ani_ref OnGetLastWindow(ani_env* env, ani_object context); + ani_ref OnFindWindow(ani_env* env, ani_string windowName); + void OnMinimizeAll(ani_env* env, ani_double displayId); + void OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId); ani_object GetTopWindowTask(ani_env* env, void* contextPtr, bool newApi); + void OnRegisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback); + void OnUnregisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback); + + std::unique_ptr registerManager_ = nullptr; }; } // namespace Rosen } // namespace OHOS diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 846b748513..e54d265113 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -46,6 +46,7 @@ enum class RegisterListenerType : uint32_t { WINDOW_NO_INTERACTION_DETECT_CB, WINDOW_RECT_CHANGE_CB, SUB_WINDOW_CLOSE_CB, + WINDOW_HIGHLIGHT_CHANGE_CB, WINDOW_STAGE_EVENT_CB, WINDOW_STAGE_CLOSE_CB, }; @@ -55,7 +56,7 @@ public: AniWindowRegisterManager(); ~AniWindowRegisterManager(); WmErrorCode RegisterListener(sptr window, std::string type, - CaseType caseType, ani_env* env, ani_ref callback); + CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout); WmErrorCode UnregisterListener(sptr window, std::string type, CaseType caseType, ani_env* env, ani_ref callback); private: @@ -91,7 +92,7 @@ private: WmErrorCode ProcessWindowVisibilityChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowNoInteractionRegister(sptr listener, sptr window, - bool isRegister, ani_env* env); + bool isRegister, ani_env* env, ani_double timeout); WmErrorCode ProcessWindowStatusChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowTitleButtonRectChangeRegister(sptr listener, sptr window, @@ -100,20 +101,13 @@ private: bool isRegister, ani_env* env); WmErrorCode ProcessSubWindowCloseRegister(sptr listener, sptr window, bool isRegister, ani_env* env); + WmErrorCode ProcessWindowHighlightChangeRegister(sptr listener, sptr window, + bool isRegister, ani_env* env); WmErrorCode ProcessMainWindowCloseRegister(const sptr& listener, const sptr& window, bool isRegister, ani_env* env); - WmErrorCode ProcessWindowStageListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env); - WmErrorCode ProcessWindowListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env); - WmErrorCode ProcessWindowManagerListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env); WmErrorCode ProcessListener(RegisterListenerType registerListenerType, CaseType caseType, const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env); + ani_env* env, ani_double timeout); std::map>> jsCbMap_; std::mutex mtx_; }; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h index ad0c6063e6..f00f7c0221 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h @@ -17,6 +17,7 @@ #define OHOS_ANI_WINDOW_STAGE_H #include "ani.h" +#include "ani_window_register_manager.h" #include "window_scene.h" namespace OHOS { @@ -33,15 +34,29 @@ class AniWindowStage { ~AniWindowStage(); static void DisableWindowDecor(ani_env* env, ani_object obj, ani_long nativeObj); static void SetShowOnLockScreen(ani_env* env, ani_class cls, ani_long nativeObj, ani_boolean showOnLockScreen); + static void RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback); + static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback); + static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, + ani_string path); + static void LoadContentWithStorage(ani_env* env, ani_object obj, ani_long nativeObj, + ani_string path, ani_object storage); - void LoadContent(ani_env* env, const std::string& content); + void SetWindowRectAutoSave(ani_env* env, ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag); + ani_boolean IsWindowRectAutoSave(ani_env* env); + void RemoveStartingWindow(ani_env* env); std::weak_ptr GetWindowScene() { return windowScene_; } - ani_object GetMainWindow(ani_env* env); + ani_ref GetMainWindow(ani_env* env); ani_boolean WindowIsWindowSupportWideGamut(ani_env* env, ani_class cls, ani_object obj); private: void OnDisableWindowDecor(ani_env* env); void OnSetShowOnLockScreen(ani_env* env, ani_boolean showOnLockScreen); + void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); + void OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); + void OnLoadContentWithStorage(ani_env* env, ani_string path, ani_object storage); std::weak_ptr windowScene_; + std::unique_ptr registerManager_ = nullptr; }; ani_object CreateAniWindowStage(ani_env* env, std::shared_ptr& windowScene); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index f5dc5d652d..83dd3133f8 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -270,10 +270,15 @@ public: static ani_object CreateAniUndefined(ani_env* env); static ani_object AniThrowError(ani_env* env, WMError errorCode, std::string msg = ""); static ani_object AniThrowError(ani_env* env, WmErrorCode errorCode, std::string msg = ""); + static ani_object CreateAniDecorButtonStyle(ani_env* env, const DecorButtonStyle& decorButtonStyle); + static ani_object CreateAniTitleButtonRect(ani_env* env, const TitleButtonRect& titleButtonRect); + static ani_object CreateAniWindowArray(ani_env* env, std::vector& windows); static ani_object CreateAniSize(ani_env* env, int32_t width, int32_t height); static ani_object CreateAniRect(ani_env* env, const Rect& rect); static ani_object CreateAniAvoidArea(ani_env* env, const AvoidArea& avoidArea, AvoidAreaType type); static ani_object CreateAniKeyboardInfo(ani_env* env, const KeyboardPanelInfo& keyboardPanelInfo); + static ani_object CreateAniSystemBarTintState(ani_env* env, DisplayId displayId, const SystemBarRegionTints& tints); + static ani_object CreateAniSystemBarRegionTint(ani_env* env, const SystemBarRegionTint& tint); static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, const char* func, const char* signature, ...); static ani_status CallAniMethodVoid(ani_env* env, ani_object object, const char* cls, const char* method, const char* signature, ...); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/idl_window_common.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/idl_window_common.h index 2ceb7cebbd..394a95487e 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/idl_window_common.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/idl_window_common.h @@ -16,6 +16,7 @@ #ifndef OHOS_IDL_WINDOW_COMMOH_H #define OHOS_IDL_WINDOW_COMMOH_H +#include "../generated/native/window.h" #include "window.h" class IdlWindowCommon { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp index e30755d2d0..cb0398266f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp @@ -214,38 +214,31 @@ ani_status AniErrUtils::ThrowBusinessError(ani_env* env, WmErrorCode error, std: ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::string message, ani_object* err) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] in2"); + TLOGI(WmsLogTag::DEFAULT, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/window/window/BusinessErrorInternal;", &aniClass); + ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", ":V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; } - status = env->Object_New(aniClass, aniCtor, err); + ani_string aniMsg; + AniWindowUtils::GetAniString(env, message, &aniMsg); + status = env->Object_New(aniClass, aniCtor, err, aniMsg, AniWindowUtils::CreateAniUndefined(env)); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - ani_object aniCode; - AniWindowUtils::NewAniObject(env, "Lstd/core/Double;", "D:V", &aniCode, ani_double(static_cast(error))); - status = env->Object_SetFieldByName_Ref(*err, "code", static_cast(aniCode)); + status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; } - ani_string aniMsg; - AniWindowUtils::GetAniString(env, message, &aniMsg); - status = env->Object_SetFieldByName_Ref(*err, "message", static_cast(aniMsg)); - if (status != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to set message, status:%{public}d", static_cast(status)); - return status; - } return ANI_OK; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index e116f5a1c0..3b4181d2cb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -18,11 +18,14 @@ #include #include +#include #include "ani.h" #include "ani_err_utils.h" #include "ani_window_utils.h" #include "permission.h" +#include "pixel_map.h" +#include "pixel_map_ani.h" #include "window_helper.h" #include "window_scene.h" #include "window_manager.h" @@ -38,8 +41,9 @@ constexpr int32_t MIN_DECOR_HEIGHT = 37; constexpr int32_t MAX_DECOR_HEIGHT = 112; namespace { /* used for free, ani has no destructor right now, only free when aniObj freed */ -static std::map localObjs; +static std::map localObjs; } // namespace +static thread_local std::map g_aniWindowMap; AniWindow::AniWindow(const sptr& window) : windowToken_(window), registerManager_(std::make_unique()) @@ -149,7 +153,7 @@ void AniWindow::Opacity(ani_env* env, ani_object obj, ani_long nativeObj, ani_do void AniWindow::OnOpacity(ani_env* env, ani_double opacity) { - TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] OnOpacity in"); auto window = GetWindow(); if (window == nullptr) { TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] window is nullptr"); @@ -244,13 +248,13 @@ bool AniWindow::ParseScaleOption(ani_env* env, ani_object scaleOptions, Transfor } trans.pivotY_ = pivotY; } - TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] ParseScaleOption end"); return true; } void AniWindow::OnScale(ani_env* env, ani_object scaleOptions) { - TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] OnScale in"); if (!Permission::IsSystemCalling()) { TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); @@ -320,13 +324,13 @@ bool AniWindow::ParseTranslateOption(ani_env* env, ani_object translateOptions, if (retTranslateZ == ANI_OK) { trans.translateZ_ = translateZ; } - TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] ParseTranslateOption end"); return true; } void AniWindow::OnTranslate(ani_env* env, ani_object translateOptions) { - TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] Translate in"); if (!Permission::IsSystemCalling()) { TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); @@ -411,13 +415,13 @@ bool AniWindow::ParseRotateOption(ani_env* env, ani_object rotateOptions, Transf if (retRotationZ == ANI_OK) { trans.rotationZ_ = rotationZ; } - TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] end"); + TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] ParseScaleOption end"); return true; } void AniWindow::OnRotate(ani_env* env, ani_object rotateOptions) { - TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] OnRotate in"); if (!Permission::IsSystemCalling()) { TLOGE(WmsLogTag::WMS_ANIMATION, "[ANI] not system app, permission denied!"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); @@ -471,7 +475,7 @@ void AniWindow::SetShadow(ani_env* env, ani_object obj, ani_long nativeObj, ani_ void AniWindow::OnSetShadow(ani_env* env, ani_double radius, ani_string color, ani_object offsetX, ani_object offsetY) { - TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] in"); + TLOGI(WmsLogTag::WMS_ANIMATION, "[ANI] OnSetShadow in"); WmErrorCode ret = WmErrorCode::WM_OK; auto window = GetWindow(); if (window == nullptr) { @@ -651,6 +655,59 @@ void AniWindow::OnSetWaterMarkFlag(ani_env* env, ani_boolean enable) } } +void AniWindow::SetWindowFocusable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isFocusable) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnSetWindowFocusable(env, isFocusable); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnSetWindowFocusable(ani_env* env, ani_boolean isFocusable) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetFocusable(isFocusable)); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "SetWindowFocusable failed."); + } +} + +void AniWindow::setWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isKeepScreenOn) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + return; + } + aniWindow->OnSetWindowKeepScreenOn(env, isKeepScreenOn); + TLOGI(WmsLogTag::DEFAULT, "[ANI] setWindowTouchable end"); +} + +void AniWindow::OnSetWindowTouchable(ani_env* env, ani_boolean isKeepScreenOn) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTouchable(static_cast(isKeepScreenOn))); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "Window set touchable on failed"); + } +} + void AniWindow::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -675,6 +732,8 @@ void AniWindow::OnLoadContent(ani_env* env, ani_string path) AniWindowUtils::GetStdString(env, path, contentPath); TLOGI(WmsLogTag::DEFAULT, "[ANI] contentPath:%{public}s", contentPath.c_str()); WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->NapiSetUIContent(contentPath, env, nullptr)); + TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", + window->GetWindowId(), window->GetWindowName().c_str(), ret); if (ret != WmErrorCode::WM_OK) { AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); } @@ -703,8 +762,9 @@ void AniWindow::OnLoadContent(ani_env* env, ani_string path, ani_object storage) } std::string contentPath; AniWindowUtils::GetStdString(env, path, contentPath); - WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->NapiSetUIContent(contentPath, (napi_env)env, - (napi_value)storage)); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->NapiSetUIContent(contentPath, env, storage)); + TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", + window->GetWindowId(), window->GetWindowName().c_str(), ret); if (ret != WmErrorCode::WM_OK) { AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); } @@ -843,8 +903,7 @@ ani_object AniWindow::OnGetUIContext(ani_env* env) TLOGE(WmsLogTag::DEFAULT, "[ANI] uicontent is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } - // 依赖arkui uicontent->GetUINapiContext(); - return AniWindowUtils::CreateAniUndefined(env); + return uicontent->GetUIAniContext(); } ani_object AniWindow::GetWindowAvoidArea(ani_env* env, ani_object obj, ani_long nativeObj, ani_int type) @@ -867,9 +926,9 @@ ani_object AniWindow::OnGetWindowAvoidArea(ani_env* env, ani_int type) return AniWindowUtils::CreateAniAvoidArea(env, avoidArea, static_cast(type)); } -void DropWindowObjectByAni(ani_object aniObj) +void DropWindowObjectByAni(ani_ref aniObj) { - auto obj = localObjs.find(reinterpret_cast(aniObj)); + auto obj = localObjs.find(reinterpret_cast(aniObj)); if (obj != localObjs.end()) { delete obj->second; } @@ -878,21 +937,28 @@ void DropWindowObjectByAni(ani_object aniObj) AniWindow* GetWindowObjectFromAni(void* aniObj) { - auto obj = localObjs.find(reinterpret_cast(aniObj)); + auto obj = localObjs.find(reinterpret_cast(aniObj)); if (obj == localObjs.end()) { return nullptr; } return obj->second; } -ani_object CreateAniWindowObject(ani_env* env, sptr& window) +ani_ref CreateAniWindowObject(ani_env* env, sptr& window) __attribute__((no_sanitize("cfi"))) { - if (env == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] null env"); + if (env == nullptr || window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] invalid env or window"); return nullptr; } - TLOGD(WmsLogTag::DEFAULT, "[ANI] create window obj"); + std::string windowName = window->GetWindowName(); + // avoid repeatedly create ani window when getWindow + ani_ref aniWindowObj = FindAniWindowObject(windowName); + if (aniWindowObj != nullptr) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] FindAniWindowObject %{public}s", windowName.c_str()); + return aniWindowObj; + } + TLOGI(WmsLogTag::DEFAULT, "[ANI] create window obj"); ani_status ret; ani_class cls = nullptr; @@ -901,6 +967,7 @@ __attribute__((no_sanitize("cfi"))) return nullptr; } std::unique_ptr aniWindow = std::make_unique(window); + TLOGD(WmsLogTag::DEFAULT, "[ANI] native obj %{public}p", aniWindow.get()); ani_method initFunc = nullptr; if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { @@ -917,11 +984,320 @@ __attribute__((no_sanitize("cfi"))) TLOGE(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } - env->Object_CallMethod_Void(obj, setObjFunc, aniWindow.get()); - localObjs.insert(std::pair(obj, aniWindow.release())); + env->Object_CallMethod_Void(obj, setObjFunc, reinterpret_cast(aniWindow.get())); + ani_ref ref = nullptr; + if (env->GlobalReference_Create(obj, &ref) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create global ref fail"); + return nullptr; + }; + aniWindow->SetAniRef(ref); + localObjs.insert(std::pair(ref, aniWindow.release())); + g_aniWindowMap[windowName] = ref; return obj; } +void AniWindow::SetFollowParentWindowLayoutEnabled(ani_env* env, ani_boolean enabled) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] windowToken_ is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSubWindow(windowToken_->GetType()) && !WindowHelper::IsDialogWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] Only sub window and dialog is valid"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetFollowParentWindowLayoutEnabled(enabled)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] Set follow parent layout failed, ret %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindow::SetWindowDelayRaiseOnDrag(ani_env* env, ani_boolean isEnabled) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_FOCUS, "[ANI] windowToken is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto result = windowToken_->SetWindowDelayRaiseEnabled(isEnabled); + if (result != WMError::WM_OK) { + TLOGE(WmsLogTag::WMS_FOCUS, "[ANI] failed"); + AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(result)); + } +} + +ani_ref AniWindow::GetParentWindow(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + sptr parentWindow = nullptr; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetParentWindow(parentWindow)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] get failed, result=%{public}d", ret); + return AniWindowUtils::AniThrowError(env, ret); + } + if (parentWindow == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] parentWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARENT); + } + return CreateAniWindowObject(env, parentWindow); +} + +ani_boolean AniWindow::GetWindowDecorVisible(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + bool isVisible = false; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetDecorVisible(isVisible)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Get window decor visibility failed"); + AniWindowUtils::AniThrowError(env, ret); + return ani_boolean(false); + } + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] end, window [%{public}u, %{public}s] isVisible=%{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), isVisible); + return ani_boolean(isVisible); +} + +void AniWindow::StopMoving(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowToken is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSystemWindow(windowToken_->GetType()) && + !WindowHelper::IsMainWindow(windowToken_->GetType()) && + !WindowHelper::IsSubWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] This is not valid window."); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = windowToken_->StopMoveWindow(); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Stop moving window failed"); + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindow::SetParentWindow(ani_env* env, ani_double windowId) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + int32_t newParentWindowId = static_cast(windowId); + WMError ret = windowToken_->SetParentWindow(newParentWindowId); + if (ret != WMError::WM_OK) { + WmErrorCode wmErrorCode = WM_JS_TO_ERROR_CODE_MAP.at(ret); + TLOGE(WmsLogTag::WMS_SUB, "[ANI] Set parent window failed"); + AniWindowUtils::AniThrowError(env, wmErrorCode); + } else { + TLOGI(WmsLogTag::WMS_SUB, "[ANI] window id: %{public}u set parent window id: %{public}u end", + windowToken_->GetWindowId(), newParentWindowId); + } +} + +void AniWindow::SetWindowTitle(ani_env* env, ani_string titleName) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string title; + if (AniWindowUtils::GetStdString(env, titleName, title) != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Failed to convert parameter to title"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetWindowTitle(title)); + if (ret == WmErrorCode::WM_OK) { + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] Window [%{public}u] end", windowToken_->GetWindowId()); + } else { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Window set title failed"); + AniWindowUtils::AniThrowError(env, ret); + } +} + +ani_object AniWindow::GetDecorButtonStyle(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] window is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + if (!windowToken_->IsPcOrPadFreeMultiWindowMode()) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] device not support"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); + } + DecorButtonStyle decorButtonStyle; + WMError errCode = windowToken_->GetDecorButtonStyle(decorButtonStyle); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(errCode); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] get decorButtonStyle fail"); + return AniWindowUtils::AniThrowError(env, ret); + } + return AniWindowUtils::CreateAniDecorButtonStyle(env, decorButtonStyle); +} + +ani_object AniWindow::GetTitleButtonRect(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] window is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + TitleButtonRect titleButtonRect; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetTitleButtonArea(titleButtonRect)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] get titleButtonRect fail"); + return AniWindowUtils::AniThrowError(env, ret); + } + TLOGI(WmsLogTag::WMS_DECOR, "Window [%{public}u, %{public}s] end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); + return AniWindowUtils::CreateAniTitleButtonRect(env, titleButtonRect); +} + +void AniWindow::SetTitleButtonVisible(ani_env* env, ani_object titleButtonVisibleParam) +{ + if (!Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] set title button visible permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + ani_boolean isMaximizeVisible = true; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(titleButtonVisibleParam, + "isMaximizeVisible", &isMaximizeVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ani_boolean isMinimizeVisible = true; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(titleButtonVisibleParam, + "isMinimizeVisible", &isMinimizeVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ani_boolean isSplitVisible = true; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(titleButtonVisibleParam, + "isSplitVisible", &isSplitVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + ani_boolean isCloseVisible = true; + if (ANI_OK != env->Object_GetPropertyByName_Boolean(titleButtonVisibleParam, + "isCloseVisible", &isCloseVisible)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WMError errCode = windowToken_->SetTitleButtonVisible(isMaximizeVisible, isMinimizeVisible, isSplitVisible, + isCloseVisible); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(errCode); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] set title button visible failed!"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_DECOR, + "[ANI] window [%{public}u, %{public}s] end [%{public}d, %{public}d, %{public}d, %{public}d]", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), isMaximizeVisible, isMinimizeVisible, + isSplitVisible, isCloseVisible); +} + +void AniWindow::SetWindowTitleMoveEnabled(ani_env* env, ani_boolean enabled) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] WindowToken is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetWindowTitleMoveEnabled(enabled)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] Window set title move enable failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] Window [%{public}u, %{public}s] end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); +} + +void AniWindow::SetWindowTopmost(ani_env* env, ani_boolean isWindowTopmost) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_HIERARCHY, "[ANI] windowToken is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!windowToken_->IsPcOrPadFreeMultiWindowMode()) { + TLOGE(WmsLogTag::WMS_HIERARCHY, "[ANI] device not support"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); + return; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_HIERARCHY, "[ANI] not allowed since window is not main window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + auto ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetMainWindowTopmost(isWindowTopmost)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_HIERARCHY, "[ANI] Window set main window topmost failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_HIERARCHY, + "[ANI] id: %{public}u, name: %{public}s, isWindowTopmost: %{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), isWindowTopmost); +} + +void AniWindow::SetTitleAndDockHoverShown(ani_env* env, ani_boolean isTitleHoverShown, ani_boolean isDockHoverShown) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WMError errCode = windowToken_->SetTitleAndDockHoverShown(isTitleHoverShown, isDockHoverShown); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(errCode); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] set title and dock hover show failed!"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] window [%{public}u, %{public}s] [%{public}d, %{public}d]", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), isTitleHoverShown, isDockHoverShown); +} + +void AniWindow::Restore(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Restore fail, not main window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->Restore()); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Window restore failed"); + AniWindowUtils::AniThrowError(env, ret); + } +} + void AniWindow::StartMoving(ani_env* env) { if (windowToken_ == nullptr) { @@ -1135,6 +1511,55 @@ void AniWindow::Maximize(ani_env* env, ani_int presentation) } } +ani_object AniWindow::Resize(ani_env* env, ani_double width, ani_double height) +{ + if (windowToken_ == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + + WMError ret = windowToken_->Resize(static_cast(width), static_cast(height)); + if (ret != WMError::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] Resize set error, ret:%{public}d", ret); + return AniWindowUtils::AniThrowError(env, ret); + } + return AniWindowUtils::CreateAniUndefined(env); +} + +ani_object AniWindow::MoveWindowTo(ani_env* env, ani_double x, ani_double y) +{ + if (windowToken_ == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + + WMError ret = windowToken_->MoveTo(static_cast(x), static_cast(y)); + if (ret != WMError::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] MoveWindowTo set error, ret:%{public}d", ret); + return AniWindowUtils::AniThrowError(env, ret); + } + return AniWindowUtils::CreateAniUndefined(env); +} + +ani_object AniWindow::GetGlobalRect(ani_env* env) +{ + wptr weakToken(windowToken_); + auto window = weakToken.promote(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + Rect globalScaleRect{0, 0, 0, 0}; + WMError ret = window->GetGlobalScaledRect(globalScaleRect); + if (ret != WMError::WM_OK) { + if (ret == WMError::WM_ERROR_DEVICE_NOT_SUPPORT) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); + } + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] Window [%{public}u, %{public}s] globalScaleRect: %{public}s", + window->GetWindowId(), window->GetWindowName().c_str(), globalScaleRect.ToString().c_str()); + return AniWindowUtils::CreateAniRect(env, globalScaleRect); +} + ani_double AniWindow::GetWindowDecorHeight(ani_env* env) { int32_t height { 0 }; @@ -1171,64 +1596,249 @@ ani_object AniWindow::SetWindowBackgroundColor(ani_env* env, const std::string& } } -void AniWindow::RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, - ani_ref callback) +void AniWindow::RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + ani_double timeOut = 0; + if (aniWindow != nullptr) { + aniWindow->OnRegisterWindowCallback(env, type, callback, timeOut); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::RegisterNoInteractionDetectedCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_double timeOut, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnRegisterWindowCallback(env, type, callback, timeOut); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_double timeOut) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->RegisterListener(window, cbType, CaseType::CASE_WINDOW, env, callback, timeOut); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + return; + } +} + +void AniWindow::UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnUnregisterWindowCallback(env, type, callback); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->UnregisterListener(window, cbType, CaseType::CASE_WINDOW, env, callback); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + return; + } +} + +void AniWindow::ShowWindow(ani_env* env, ani_object obj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnShowWindow(env); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnShowWindow(ani_env* env) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (WindowHelper::IsMainWindowAndNotShown(window->GetType(), window->GetWindowState())) { + TLOGW(WmsLogTag::WMS_LIFE, + "window Type %{public}u and window state %{public}u is not supported, [%{public}u, %{public}s]", + static_cast(window->GetType()), static_cast(window->GetWindowState()), + window->GetWindowId(), window->GetWindowName().c_str()); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->Show(0, false, true)); + TLOGI(WmsLogTag::WMS_LIFE, "Window [%{public}u, %{public}s] show with ret=%{public}d", + window->GetWindowId(), window->GetWindowName().c_str(), ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "Window show failed"); + return; + } +} + +void AniWindow::DestroyWindow(ani_env* env, ani_object obj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + aniWindow->OnDestroyWindow(env); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} + +void AniWindow::OnDestroyWindow(ani_env* env) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (WindowHelper::IsMainWindow(window->GetType())) { + TLOGW(WmsLogTag::WMS_LIFE, "window Type %{public}u is not supported, [%{public}u, %{public}s]", + static_cast(window->GetType()), + window->GetWindowId(), window->GetWindowName().c_str()); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->Destroy()); + TLOGI(WmsLogTag::WMS_LIFE, "window [%{public}u, %{public}s] ret=%{public}d", + window->GetWindowId(), window->GetWindowName().c_str(), ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "Window destroy failed"); + return; + } + windowToken_ = nullptr; +} + +ani_boolean AniWindow::IsWindowShowing(ani_env* env, ani_object obj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + return aniWindow->OnIsWindowShowing(env); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + return ani_boolean(false); + } +} + +ani_boolean AniWindow::OnIsWindowShowing(ani_env* env) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto window = GetWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + return ani_boolean(window->GetWindowState() == WindowState::STATE_SHOWN); +} + +void AniWindow::HideWithAnimation(ani_env* env, ani_object obj, ani_long nativeObj) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { - aniWindow->OnRegisterWindowCallback(env, type, callback); + aniWindow->OnHideWithAnimation(env); } else { TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); } } -void AniWindow::OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback) +void AniWindow::OnHideWithAnimation(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + if (!Permission::IsSystemCallingOrStartByHdcd(true)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } auto window = GetWindow(); if (window == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - std::string cbType; - AniWindowUtils::GetStdString(env, type, cbType); - TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); - WmErrorCode ret = registerManager_->RegisterListener(window, cbType, CaseType::CASE_WINDOW, env, callback); + auto winType = window->GetType(); + if (!WindowHelper::IsSystemWindow(winType)) { + TLOGE(WmsLogTag::WMS_LIFE, + "window Type %{public}u is not supported", static_cast(winType)); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->Hide(0, true, false)); if (ret != WmErrorCode::WM_OK) { - AniWindowUtils::AniThrowError(env, ret); + AniWindowUtils::AniThrowError(env, ret, "Window show failed"); return; } } -void AniWindow::UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, - ani_ref callback) +void AniWindow::ShowWithAnimation(ani_env* env, ani_object obj, ani_long nativeObj) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { - aniWindow->OnUnregisterWindowCallback(env, type, callback); + aniWindow->OnShowWithAnimation(env); } else { TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); } } -void AniWindow::OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback) +void AniWindow::OnShowWithAnimation(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + if (!Permission::IsSystemCallingOrStartByHdcd(true)) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } auto window = GetWindow(); if (window == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - std::string cbType; - AniWindowUtils::GetStdString(env, type, cbType); - TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); - WmErrorCode ret = registerManager_->UnregisterListener(window, cbType, CaseType::CASE_WINDOW, env, callback); + auto winType = window->GetType(); + if (!WindowHelper::IsSystemWindow(winType)) { + TLOGE(WmsLogTag::WMS_LIFE, + "window Type %{public}u is not supported", static_cast(winType)); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->Show(0, true, true)); if (ret != WmErrorCode::WM_OK) { - AniWindowUtils::AniThrowError(env, ret); + AniWindowUtils::AniThrowError(env, ret, "Window show failed"); return; } } @@ -1436,9 +2046,247 @@ ani_object AniWindow::SetSpecificSystemBarEnabled(ani_env* env, ani_string name, TLOGE(WmsLogTag::WMS_IMMS, "SetSpecificSystemBarEnabled failed, ret = %{public}d", err); return AniWindowUtils::AniThrowError(env, err); } + +ani_ref FindAniWindowObject(const std::string& windowName) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI] Try to find window %{public}s in g_aniWindowMap", windowName.c_str()); + if (g_aniWindowMap.find(windowName) == g_aniWindowMap.end()) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] Can not find window %{public}s in g_aniWindowMap", windowName.c_str()); + return nullptr; + } + return g_aniWindowMap[windowName]; +} + +ani_object AniWindow::Snapshot(ani_env* env) +{ + if (windowToken_ == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + std::shared_ptr pixelMap = windowToken_->Snapshot(); + if (pixelMap == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + auto nativePixelMap = Media::PixelMapAni::CreatePixelMap(env, pixelMap); + if (nativePixelMap == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u, %{public}s], WxH=%{public}dx%{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), + pixelMap->GetWidth(), pixelMap->GetHeight()); + return nativePixelMap; +} + +void AniWindow::HideNonSystemFloatingWindows(ani_env* env, ani_boolean shouldHide) +{ + if (windowToken_ == nullptr) { + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (windowToken_->IsFloatingWindowAppType()) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "window is app floating window"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING, + "HideNonSystemFloatingWindows is not allowed since window is app floating window"); + return; + } + WMError ret = windowToken_->HideNonSystemFloatingWindows(shouldHide); + if (ret != WMError::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); + AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(ret), + "Hide non-system floating windows failed"); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, + "end. Window [%{public}u, %{public}s]", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); +} + +void AniWindow::Finalizer(ani_env* env, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow != nullptr) { + auto window = aniWindow->GetWindow(); + if (window != nullptr) { + g_aniWindowMap.erase(window->GetWindowName()); + } + DropWindowObjectByAni(aniWindow->GetAniRef()); + env->GlobalReference_Delete(aniWindow->GetAniRef()); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + } +} } // namespace Rosen } // namespace OHOS +static void SetFollowParentWindowLayoutEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_SUB, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] windowToken is null"); + return; + } + aniWindow->SetFollowParentWindowLayoutEnabled(env, enabled); +} + +static void SetWindowDelayRaiseOnDrag(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isEnabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_FOCUS, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_FOCUS, "[ANI] windowToken is null"); + return; + } + aniWindow->SetWindowDelayRaiseOnDrag(env, isEnabled); +} + +static ani_ref GetParentWindow(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_SUB, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] windowToken is null"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->GetParentWindow(env); +} + +static ani_boolean GetWindowDecorVisible(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return ani_boolean(false); + } + return aniWindow->GetWindowDecorVisible(env); +} + +static void StopMoving(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken is null"); + return; + } + aniWindow->StopMoving(env); +} + +static void SetParentWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_double windowId) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_SUB, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI] windowToken is null"); + return; + } + aniWindow->SetParentWindow(env, windowId); +} + +static void SetWindowTitle(ani_env* env, ani_object obj, ani_long nativeObj, ani_string titleName) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return; + } + aniWindow->SetWindowTitle(env, titleName); +} + +static ani_object GetDecorButtonStyle(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->GetDecorButtonStyle(env); +} + +static ani_object GetTitleButtonRect(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->GetTitleButtonRect(env); +} + +static void SetTitleButtonVisible(ani_env* env, ani_object obj, ani_long nativeObj, ani_object titleButtonVisibleParam) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return; + } + aniWindow->SetTitleButtonVisible(env, titleButtonVisibleParam); +} + +static void SetWindowTitleMoveEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_DECOR, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] windowToken is null"); + return; + } + aniWindow->SetWindowTitleMoveEnabled(env, enabled); +} + +static void SetWindowTopmost(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isWindowTopmost) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_HIERARCHY, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_HIERARCHY, "[ANI] windowToken is null"); + return; + } + aniWindow->SetWindowTopmost(env, isWindowTopmost); +} + +static void SetTitleAndDockHoverShown(ani_env* env, ani_object obj, ani_long nativeObj, + ani_boolean isTitleHoverShown, ani_boolean isDockHoverShown) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken is null"); + return; + } + aniWindow->SetTitleAndDockHoverShown(env, isTitleHoverShown, isDockHoverShown); +} + +static void Restore(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowToken is null"); + return; + } + aniWindow->Restore(env); +} + static void StartMoving(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; @@ -1525,6 +2373,42 @@ static void Maximize(ani_env* env, ani_object obj, ani_long nativeObj, ani_int p aniWindow->Maximize(env, presentation); } +static ani_object WindowResize(ani_env* env, ani_object obj, ani_long nativeObj, ani_double width, ani_double height) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->Resize(env, width, height); +} + +static ani_object WindowMoveWindowTo(ani_env* env, ani_object obj, ani_long nativeObj, ani_double x, ani_double y) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->MoveWindowTo(env, x, y); +} + +static ani_object WindowGetGlobalRect(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->GetGlobalRect(env); +} + static ani_double WindowGetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; @@ -1599,8 +2483,8 @@ static ani_int WindowSetWindowDecorHeight(ani_env* env, ani_object obj, ani_long static ani_object WindowGetWindowProperties(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); + TLOGD(WmsLogTag::DEFAULT, "[ANI], %{public}p", aniWindow); if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); return AniWindowUtils::CreateAniUndefined(env); @@ -1665,6 +2549,30 @@ static ani_int WindowSetSpecificSystemBarEnabled(ani_env* env, ani_object obj, a return ANI_OK; } +static ani_object Snapshot(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return aniWindow->Snapshot(env); +} + +static void HideNonSystemFloatingWindows(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean shouldHide) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken is nullptr"); + return; + } + aniWindow->HideNonSystemFloatingWindows(env, shouldHide); +} + ani_object CreateAniWindow(ani_env* env, OHOS::sptr& window) __attribute__((no_sanitize("cfi"))) { @@ -1683,6 +2591,7 @@ __attribute__((no_sanitize("cfi"))) } std::unique_ptr uniqueWindow = std::make_unique(window); + TLOGD(WmsLogTag::WMS_IMMS, "[ANI] native obj %{public}p", uniqueWindow.get()); ani_field contextField; if ((ret = env->Class_FindField(cls, "nativeObj", &contextField)) != ANI_OK) { @@ -1708,12 +2617,15 @@ __attribute__((no_sanitize("cfi"))) env->Object_CallMethod_Void(obj, setObjFunc, reinterpret_cast(uniqueWindow.get())); localObjs.insert(std::pair(obj, uniqueWindow.release())); + TLOGD(WmsLogTag::DEFAULT, "[ANI] window stage created %{public}p", reinterpret_cast(obj)); return obj; } static ani_object WindowCreate(ani_env* env, ani_long window) { using namespace OHOS::Rosen; + TLOGD(WmsLogTag::DEFAULT, "[ANI] create window with scene 0x%{public}p %{public}d", + reinterpret_cast(env), (int32_t)window); Rect baseWindowRect = { 150, 150, 400, 600 }; OHOS::sptr baseOp = new WindowOption(); SystemBarProperty barProperty = SystemBarProperty(); @@ -1742,6 +2654,34 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } std::array methods = { + ani_native_function {"setFollowParentWindowLayoutEnabled", "JZ:V", + reinterpret_cast(SetFollowParentWindowLayoutEnabled)}, + ani_native_function {"setWindowDelayRaiseOnDrag", "JZ:V", + reinterpret_cast(SetWindowDelayRaiseOnDrag)}, + ani_native_function {"getParentWindow", "J:L@ohos/window/window/Window;", + reinterpret_cast(GetParentWindow)}, + ani_native_function {"getWindowDecorVisible", "J:Z", + reinterpret_cast(GetWindowDecorVisible)}, + ani_native_function {"stopMoving", "J:V", + reinterpret_cast(StopMoving)}, + ani_native_function {"setParentWindow", "JD:V", + reinterpret_cast(SetParentWindow)}, + ani_native_function {"setWindowTitle", "JLstd/core/String;:V", + reinterpret_cast(SetWindowTitle)}, + ani_native_function {"getDecorButtonStyle", "J:L@ohos/window/window/DecorButtonStyle;", + reinterpret_cast(GetDecorButtonStyle)}, + ani_native_function {"getTitleButtonRect", "J:L@ohos/window/window/TitleButtonRect;", + reinterpret_cast(GetTitleButtonRect)}, + ani_native_function {"setTitleButtonVisible", "JL@ohos/window/window/TitleButtonVisibleParam;:V", + reinterpret_cast(SetTitleButtonVisible)}, + ani_native_function {"setWindowTitleMoveEnabled", "JZ:V", + reinterpret_cast(SetWindowTitleMoveEnabled)}, + ani_native_function {"setWindowTopmost", "JZ:V", + reinterpret_cast(SetWindowTopmost)}, + ani_native_function {"setTitleAndDockHoverShown", "JZZ:V", + reinterpret_cast(SetTitleAndDockHoverShown)}, + ani_native_function {"restore", "J:V", + reinterpret_cast(Restore)}, ani_native_function {"startMoving", "J:V", reinterpret_cast(StartMoving)}, ani_native_function {"startMoveWindowWithCoordinate", "JDD:V", @@ -1756,6 +2696,12 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(Minimize)}, ani_native_function {"maximize", "JI:V", reinterpret_cast(Maximize)}, + ani_native_function {"resize", "JDD:I", + reinterpret_cast(WindowResize)}, + ani_native_function {"moveWindowTo", "JDD:I", + reinterpret_cast(WindowMoveWindowTo)}, + ani_native_function {"getGlobalRect", "J:L@ohos/window/window/Rect;", + reinterpret_cast(WindowGetGlobalRect)}, ani_native_function {"getWindowDecorHeight", "J:D", reinterpret_cast(WindowGetWindowDecorHeight)}, ani_native_function {"setWindowBackgroundColor", "JLstd/core/String;:I", @@ -1778,6 +2724,10 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(WindowSetSystemBarProperties)}, ani_native_function {"setSpecificSystemBarEnabled", "JLstd/core/String;ZZ:I", reinterpret_cast(WindowSetSpecificSystemBarEnabled)}, + ani_native_function {"snapshot", "J:L@ohos/multimedia/image/image/PixelMap;", + reinterpret_cast(Snapshot)}, + ani_native_function {"hideNonSystemFloatingWindows", "JZ:V", + reinterpret_cast(HideNonSystemFloatingWindows)}, ani_native_function {"setWindowColorSpaceSync", "JI:V", reinterpret_cast(AniWindow::SetWindowColorSpace)}, ani_native_function {"setPreferredOrientationSync", "JI:V", @@ -1791,7 +2741,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"loadContentSync", "JLstd/core/String;:V", reinterpret_cast(AniWindow::LoadContent)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", + "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", reinterpret_cast(AniWindow::LoadContentNew)}, ani_native_function {"setWindowKeepScreenOnSync", "JZ:V", reinterpret_cast(AniWindow::SetWindowKeepScreenOn)}, @@ -1803,12 +2753,14 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::GetWindowAvoidArea)}, ani_native_function {"setWaterMarkFlagSync", "JZ:V", reinterpret_cast(AniWindow::SetWaterMarkFlag)}, + ani_native_function {"setWindowFocusableSync", "JZ:V", + reinterpret_cast(AniWindow::SetWindowFocusable)}, ani_native_function {"keepKeyboardOnFocusSync", "JZ:V", reinterpret_cast(AniWindow::KeepKeyboardOnFocus)}, - ani_native_function {"onSync", nullptr, - reinterpret_cast(AniWindow::RegisterWindowCallback)}, - ani_native_function {"offSync", nullptr, - reinterpret_cast(AniWindow::UnregisterWindowCallback)}, + ani_native_function {"setWindowTouchableSync", "JZ:V", + reinterpret_cast(AniWindow::setWindowTouchable)}, + ani_native_function {"onNoInteractionDetected", nullptr, + reinterpret_cast(AniWindow::RegisterNoInteractionDetectedCallback)}, ani_native_function {"opacity", "JD:V", reinterpret_cast(AniWindow::Opacity)}, ani_native_function {"scale", "JL@ohos/window/window/ScaleOptions;:V", @@ -1819,6 +2771,20 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::Rotate)}, ani_native_function {"setShadow", "JDLstd/core/String;Lstd/core/Double;Lstd/core/Double;:V", reinterpret_cast(AniWindow::SetShadow)}, + ani_native_function {"onSync", nullptr, + reinterpret_cast(AniWindow::RegisterWindowCallback)}, + ani_native_function {"offSync", nullptr, + reinterpret_cast(AniWindow::UnregisterWindowCallback)}, + ani_native_function {"showWindowSync", nullptr, + reinterpret_cast(AniWindow::ShowWindow)}, + ani_native_function {"destroyWindowSync", nullptr, + reinterpret_cast(AniWindow::DestroyWindow)}, + ani_native_function {"isWindowShowingSync", nullptr, + reinterpret_cast(AniWindow::IsWindowShowing)}, + ani_native_function {"hideWithAnimationSync", nullptr, + reinterpret_cast(AniWindow::HideWithAnimation)}, + ani_native_function {"showWithAnimationSync", nullptr, + reinterpret_cast(AniWindow::ShowWithAnimation)}, }; if ((ret = env->Class_BindNativeMethods(cls, methods.data(), methods.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u", ret); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index d2ed3bb582..d3bd0a9195 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -79,11 +79,43 @@ void AniWindowListener::OnModeChange(WindowMode mode, bool hasDeco) void AniWindowListener::OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, displayId, tints] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallBack", + nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniSystemBarTintState(eng, displayId, tints)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type, const sptr& info) { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, avoidArea, type] { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnAvoidAreaChanged"); + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, static_cast(type)); + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallBack", + nullptr, thisListener->aniCallBack_, nativeAvoidArea, ani_int(type)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } void AniWindowListener::LifeCycleCallBack(LifeCycleEventType eventType) @@ -207,14 +239,61 @@ void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanel void AniWindowListener::OnTouchOutside() const { + TLOGI(WmsLogTag::DEFAULT, "[ANI] touchoutside"); + auto task = [self = weakRef_, eng = env_] () { + auto thisListener = self.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowTouchOutCallback", + nullptr, thisListener->aniCallBack_); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "wms:AniWindowListener::TouchOutsideCallBack", 0, + AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnScreenshot() { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallBack", + nullptr, thisListener->aniCallBack_); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnDialogTargetTouch() const { + TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); + auto task = [self = weakRef_, eng = env_] () { + auto thisListener = self.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowDialogTargetCallback", + nullptr, thisListener->aniCallBack_); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "wms:AniWindowListener::DialogTargetTouchCallBack", 0, + AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnDialogDeathRecipient() const @@ -223,14 +302,60 @@ void AniWindowListener::OnDialogDeathRecipient() const void AniWindowListener::OnGestureNavigationEnabledUpdate(bool enable) { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, enable] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + nullptr, thisListener->aniCallBack_, ani_boolean(enable)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, showWaterMark] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + nullptr, thisListener->aniCallBack_, ani_boolean(showWaterMark)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnWindowNoInteractionCallback() { + TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); + auto task = [self = weakRef_, eng = env_] () { + auto thisListener = self.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowNoInteractionCallback", + nullptr, thisListener->aniCallBack_); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "wms:AniWindowListener::WindowNoInteractionCallback", 0, + AppExecFwk::EventQueue::Priority::HIGH); } void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) @@ -255,6 +380,40 @@ void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) void AniWindowListener::OnWindowVisibilityChangedCallback(const bool isVisible) { + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, isVisible] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + nullptr, thisListener->aniCallBack_, ani_boolean(isVisible)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); +} + +void AniWindowListener::OnWindowHighlightChange(bool isHighlight) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, eng = env_, isHighlight] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + nullptr, thisListener->aniCallBack_, ani_boolean(isHighlight)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } void AniWindowListener::OnWindowTitleButtonRectChanged(const TitleButtonRect& titleButtonRect) @@ -263,6 +422,43 @@ void AniWindowListener::OnWindowTitleButtonRectChanged(const TitleButtonRect& ti void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) { + TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] rect:%{public}s, reason:%{public}d", rect.ToString().c_str(), reason); + if (currRect_ == rect && reason == WindowSizeChangeReason::UNDEFINED) { + TLOGD(WmsLogTag::WMS_LAYOUT, "skip redundant rect update"); + return; + } + RectChangeReason rectChangeReason = RectChangeReason::UNDEFINED; + if (JS_SIZE_CHANGE_REASON.count(reason) != 0 && + !(reason == WindowSizeChangeReason::MAXIMIZE && rect.posX_ != 0)) { + rectChangeReason = JS_SIZE_CHANGE_REASON.at(reason); + } + if (rectChangeReason == RectChangeReason::DRAG_END && + currentReason_ != RectChangeReason::DRAG_START && currentReason_ != RectChangeReason::DRAG) { + TLOGD(WmsLogTag::WMS_LAYOUT, "drag end change to move event"); + rectChangeReason = RectChangeReason::MOVE; + } + auto task = [self = weakRef_, rect, reason, eng = env_] () { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowRectCallback", + nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniRect(eng, rect), + static_cast(reason)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::WMS_LAYOUT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "wms:AniWindowListener::RectChangeCallBack", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + currRect_ = rect; + if (rectChangeReason == RectChangeReason::UNDEFINED) { + TLOGD(WmsLogTag::WMS_LAYOUT, "ignore undefined reason to change last reason"); + } else { + currentReason_ = rectChangeReason; + } } void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index eb1ca962ab..790ea41edc 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -18,18 +18,65 @@ #include #include "ani.h" -#include "window_scene.h" +#include "ani_window.h" +#include "ani_window_stage.h" +#include "ani_window.h" +#include "ani_window_stage.h" +#include "ani_window_utils.h" +#include "singleton_container.h" +#include "window_manager.h" #include "window_manager_hilog.h" +#include "window_scene.h" #include "ani_window_utils.h" -#include "ani_window.h" namespace OHOS { namespace Rosen { -ani_status AniWindowManager::AniWindowManagerInit(ani_env* env, ani_namespace windowNameSpace) +using DisplayId = uint64_t; +namespace { +const std::string PIP_WINDOW = "pip_window"; +constexpr int32_t INVALID_COORDINATE = -1; +} +AniWindowManager::AniWindowManager() : registerManager_(std::make_unique()) +{ +} + +ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + ani_namespace ns; + ani_status ret; + if ((ret = env->FindNamespace("L@ohos/window/window;", &ns)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] find ns %{public}u", ret); + return ANI_NOT_FOUND; + } + std::array functions = { + ani_native_function {"CreateWindowStage", "J:L@ohos/window/window/WindowStageInternal;", + reinterpret_cast(AniWindowManager::WindowStageCreate)}, + ani_native_function {"getWindowsByCoordinate", + "JL@ohos/window/window/GetWindowsByCoordinateParam;:Lescompat/Array;", + reinterpret_cast(AniWindowManager::GetWindowsByCoordinate)}, + ani_native_function {"getLastWindowSync", + "JLapplication/BaseContext/BaseContext;:L@ohos/window/window/Window;", + reinterpret_cast(AniWindowManager::GetLastWindow)}, + ani_native_function {"findWindowSync", + "JLstd/core/String;:L@ohos/window/window/Window;", + reinterpret_cast(AniWindowManager::FindWindow)}, + ani_native_function {"minimizeAllSync", "JD:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, + ani_native_function {"shiftAppWindowFocusSync", "JDD:V", + reinterpret_cast(AniWindowManager::ShiftAppWindowFocus)}, + ani_native_function {"onSync", nullptr, + reinterpret_cast(AniWindowManager::RegisterWindowManagerCallback)}, + ani_native_function {"offSync", nullptr, + reinterpret_cast(AniWindowManager::UnregisterWindowManagerCallback)}, + ani_native_function {"windowDestroyCallback", nullptr, reinterpret_cast(AniWindow::Finalizer)}, + }; + if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind ns func %{public}u", ret); + return ANI_NOT_FOUND; + } + ani_function setObjFunc = nullptr; - ani_status ret = env->Namespace_FindFunction(windowNameSpace, "setNativeObj", "J:V", &setObjFunc); + ret = env->Namespace_FindFunction(ns, "setNativeObj", "J:V", &setObjFunc); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find setNativeObj func fail %{public}u", ret); return ret; @@ -37,20 +84,77 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env, ani_namespace wi std::unique_ptr aniWinManager = std::make_unique(); ret = env->Function_Call_Void(setObjFunc, aniWinManager.release()); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] find setNativeObj func fail %{public}u", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI] call setNativeObj func fail %{public}u", ret); return ret; } return ret; } -ani_object AniWindowManager::GetLastWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_object context) +ani_object AniWindowManager::WindowStageCreate(ani_env* env, ani_long scene) +{ + std::shared_ptr scenePtr; + return CreateAniWindowStage(env, scenePtr); +} + +ani_object AniWindowManager::GetWindowsByCoordinate(ani_env* env, ani_long nativeObj, ani_object getWindowsParam) +{ + TLOGI(WmsLogTag::WMS_PC, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnGetWindowsByCoordinate(env, getWindowsParam) : nullptr; +} + +ani_object AniWindowManager::OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam) +{ + uint64_t displayId = static_cast(DISPLAY_ID_INVALID); + ani_double aniDisplayId; + if (ANI_OK != env->Object_GetPropertyByName_Double(getWindowsParam, "displayId", &aniDisplayId)) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] Failed to convert parameter to displayId"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + displayId = static_cast(aniDisplayId); + if (displayId < 0 || + SingletonContainer::Get().GetDisplayById(displayId) == nullptr) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] invalid displayId"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + int32_t windowNumber = 0; + ani_double aniWindowNumber; + if (ANI_OK == env->Object_GetPropertyByName_Double(getWindowsParam, "windowNumber", &aniWindowNumber)) { + windowNumber = static_cast(aniWindowNumber); + } + int32_t x = INVALID_COORDINATE; + ani_double aniX; + if (ANI_OK == env->Object_GetPropertyByName_Double(getWindowsParam, "x", &aniX)) { + x = static_cast(aniX); + } + int32_t y = INVALID_COORDINATE; + ani_double aniY; + if (ANI_OK == env->Object_GetPropertyByName_Double(getWindowsParam, "y", &aniY)) { + y = static_cast(aniY); + } + std::vector windowIds; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get(). + GetWindowIdsByCoordinate(displayId, windowNumber, x, y, windowIds)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_PC, "[ANI] getWindowsByCoordinate failed"); + return AniWindowUtils::AniThrowError(env, ret); + } + std::vector windows(windowIds.size()); + for (size_t i = 0; i < windowIds.size(); i++) { + sptr window = Window::GetWindowWithId(windowIds[i]); + windows[i] = CreateAniWindowObject(env, window); + } + return AniWindowUtils::CreateAniWindowArray(env, windows); +} + +ani_ref AniWindowManager::GetLastWindow(ani_env* env, ani_long nativeObj, ani_object context) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); return aniWindowManager != nullptr ? aniWindowManager->OnGetLastWindow(env, context) : nullptr; } -ani_object AniWindowManager::OnGetLastWindow(ani_env* env, ani_object aniContext) +ani_ref AniWindowManager::OnGetLastWindow(ani_env* env, ani_object aniContext) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto contextPtr = AniWindowUtils::GetAbilityContext(env, aniContext); @@ -66,5 +170,130 @@ ani_object AniWindowManager::OnGetLastWindow(ani_env* env, ani_object aniContext } return CreateAniWindowObject(env, window); } + +ani_ref AniWindowManager::FindWindow(ani_env* env, ani_long nativeObj, ani_string windowName) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnFindWindow(env, windowName) : nullptr; +} + +ani_ref AniWindowManager::OnFindWindow(ani_env* env, ani_string windowName) +{ + std::string name; + AniWindowUtils::GetStdString(env, windowName, name); + TLOGI(WmsLogTag::DEFAULT, "[ANI]Window name=%{public}s", name.c_str()); + if (name.compare(PIP_WINDOW) == 0) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + ani_ref aniWindowObj = FindAniWindowObject(name); + if (aniWindowObj != nullptr) { + TLOGD(WmsLogTag::DEFAULT, "[ANI]Find window: %{public}s, use exist js window", name.c_str()); + return aniWindowObj; + } else { + sptr window = Window::Find(name); + if (window == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } else { + return CreateAniWindowObject(env, window); + } + } +} + +void AniWindowManager::MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + if (aniWindowManager != nullptr) { + aniWindowManager->OnMinimizeAll(env, displayId); + } else { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowManager is nullptr"); + } +} + +void AniWindowManager::OnMinimizeAll(ani_env* env, ani_double displayId) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + if (static_cast(displayId) < 0 || + SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] Minimize all failed, Invalidate params."); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().MinimizeAllAppWindows(static_cast(displayId))); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] Minimize all failed, ret:%{public}d", static_cast(ret)); + AniWindowUtils::AniThrowError(env, ret, "OnMinimizeAll failed"); + return; + } +} + +void AniWindowManager::RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, + ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + if (aniWindowManager != nullptr) { + aniWindowManager->OnRegisterWindowManagerCallback(env, type, callback); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindowManager is nullptr"); + } +} + +void AniWindowManager::OnRegisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback) +{ + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->RegisterListener(nullptr, cbType, CaseType::CASE_WINDOW_MANAGER, + env, callback, ani_double(0)); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindowManager::UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, + ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + if (aniWindowManager != nullptr) { + aniWindowManager->OnUnregisterWindowManagerCallback(env, type, callback); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindowManager is nullptr"); + } +} + +void AniWindowManager::OnUnregisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback) +{ + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->UnregisterListener(nullptr, cbType, CaseType::CASE_WINDOW_MANAGER, + env, callback); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, + ani_double sourceWindowId, ani_double targetWindowId) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); +} + +void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().ShiftAppWindowFocus(sourceWindowId, targetWindowId)); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "ShiftAppWindowFocus failed."); + } + return ; +} } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index b9913addd8..08ee5d0e73 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include "ani.h" #include "ani_window_register_manager.h" #include "singleton_container.h" #include "window_manager.h" @@ -48,6 +49,7 @@ const std::map WINDOW_LISTENER_MAP { {WINDOW_NO_INTERACTION_DETECT_CB, RegisterListenerType::WINDOW_NO_INTERACTION_DETECT_CB}, {WINDOW_RECT_CHANGE_CB, RegisterListenerType::WINDOW_RECT_CHANGE_CB}, {SUB_WINDOW_CLOSE_CB, RegisterListenerType::SUB_WINDOW_CLOSE_CB}, + {WINDOW_HIGHLIGHT_CHANGE_CB, RegisterListenerType::WINDOW_HIGHLIGHT_CHANGE_CB}, }; const std::map WINDOW_STAGE_LISTENER_MAP { // white register list for window stage @@ -273,9 +275,25 @@ WmErrorCode AniWindowRegisterManager::ProcessWindowVisibilityChangeRegister(sptr } WmErrorCode AniWindowRegisterManager::ProcessWindowNoInteractionRegister(sptr listener, - sptr window, bool isRegister, ani_env* env) + sptr window, bool isRegister, ani_env* env, ani_double timeout) { - return WmErrorCode::WM_OK; + if (window == nullptr) { + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + if (!isRegister) { + return WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterWindowNoInteractionListener(thisListener)); + } + ani_long tmptimeout = static_cast(timeout); + constexpr ani_long secToMicrosecRatio = 1000; + constexpr ani_long noInteractionMax = LLONG_MAX / secToMicrosecRatio; + if (tmptimeout <= 0 || (tmptimeout > noInteractionMax)) { + TLOGE(WmsLogTag::DEFAULT, "invalid parameter: no-interaction-timeout %{public}lld is not in(0s~%{public}lld", + tmptimeout, noInteractionMax); + return WmErrorCode::WM_ERROR_INVALID_PARAM; + } + thisListener->SetTimeout(tmptimeout * secToMicrosecRatio); + return WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterWindowNoInteractionListener(thisListener)); } WmErrorCode AniWindowRegisterManager::ProcessScreenshotRegister(sptr listener, @@ -365,7 +383,7 @@ bool AniWindowRegisterManager::IsCallbackRegistered(ani_env* env, std::string ty } WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, std::string type, - CaseType caseType, ani_env* env, ani_ref callback) + CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout) { std::lock_guard lock(mtx_); if (IsCallbackRegistered(env, type, callback)) { @@ -393,7 +411,7 @@ WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, std: return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; } windowManagerListener->SetMainEventHandler(); - WmErrorCode ret = ProcessListener(listenerType, caseType, windowManagerListener, window, true, env); + WmErrorCode ret = ProcessListener(listenerType, caseType, windowManagerListener, window, true, env, timeout); if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI]Register type %{public}s failed", type.c_str()); return ret; @@ -404,95 +422,80 @@ WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, std: return WmErrorCode::WM_OK; } -WmErrorCode AniWindowRegisterManager::ProcessWindowStageListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, ani_env* env) -{ - switch (registerListenerType) { - case RegisterListenerType::WINDOW_STAGE_EVENT_CB: - return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); - case RegisterListenerType::WINDOW_STAGE_CLOSE_CB: - return ProcessMainWindowCloseRegister(windowManagerListener, window, isRegister, env); - default: - TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", - static_cast(registerListenerType)); - return WmErrorCode::WM_ERROR_INVALID_PARAM; - } -} - -WmErrorCode AniWindowRegisterManager::ProcessWindowListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, ani_env* env) -{ - switch (static_cast(registerListenerType)) { - case static_cast(RegisterListenerType::WINDOW_SIZE_CHANGE_CB): - return ProcessWindowChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::SYSTEM_AVOID_AREA_CHANGE_CB): - return ProcessSystemAvoidAreaChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::AVOID_AREA_CHANGE_CB): - return ProcessAvoidAreaChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::LIFECYCLE_EVENT_CB): - return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_EVENT_CB): - return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::KEYBOARD_HEIGHT_CHANGE_CB): - return ProcessOccupiedAreaChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::KEYBOARD_DID_SHOW_CB): - return ProcessKeyboardDidShowRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::KEYBOARD_DID_HIDE_CB): - return ProcessKeyboardDidHideRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::TOUCH_OUTSIDE_CB): - return ProcessTouchOutsideRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::SCREENSHOT_EVENT_CB): - return ProcessScreenshotRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::DIALOG_TARGET_TOUCH_CB): - return ProcessDialogTargetTouchRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::DIALOG_DEATH_RECIPIENT_CB): - return ProcessDialogDeathRecipientRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_STATUS_CHANGE_CB): - return ProcessWindowStatusChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_TITLE_BUTTON_RECT_CHANGE_CB): - return ProcessWindowTitleButtonRectChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_VISIBILITY_CHANGE_CB): - return ProcessWindowVisibilityChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_NO_INTERACTION_DETECT_CB): - return ProcessWindowNoInteractionRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::WINDOW_RECT_CHANGE_CB): - return ProcessWindowRectChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::SUB_WINDOW_CLOSE_CB): - return ProcessSubWindowCloseRegister(windowManagerListener, window, isRegister, env); - default: - TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", - static_cast(registerListenerType)); - return WmErrorCode::WM_ERROR_INVALID_PARAM; - } -} - -WmErrorCode AniWindowRegisterManager::ProcessWindowManagerListener(RegisterListenerType registerListenerType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, ani_env* env) -{ - switch (static_cast(registerListenerType)) { - case static_cast(RegisterListenerType::SYSTEM_BAR_TINT_CHANGE_CB): - return ProcessSystemBarChangeRegister(windowManagerListener, window, isRegister, env); - case static_cast(RegisterListenerType::GESTURE_NAVIGATION_ENABLED_CHANGE_CB): - return ProcessGestureNavigationEnabledChangeRegister(windowManagerListener, window, isRegister, - env); - case static_cast(RegisterListenerType::WATER_MARK_FLAG_CHANGE_CB): - return ProcessWaterMarkFlagChangeRegister(windowManagerListener, window, isRegister, env); - default: - TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", - static_cast(registerListenerType)); - return WmErrorCode::WM_ERROR_INVALID_PARAM; - } -} - WmErrorCode AniWindowRegisterManager::ProcessListener(RegisterListenerType registerListenerType, CaseType caseType, - const sptr& windowManagerListener, const sptr& window, bool isRegister, ani_env* env) + const sptr& windowManagerListener, const sptr& window, bool isRegister, + ani_env* env, ani_double timeout) { if (caseType == CaseType::CASE_WINDOW_MANAGER) { - ProcessWindowManagerListener(registerListenerType, windowManagerListener, window, isRegister, env); + switch (static_cast(registerListenerType)) { + case static_cast(RegisterListenerType::SYSTEM_BAR_TINT_CHANGE_CB): + return ProcessSystemBarChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::GESTURE_NAVIGATION_ENABLED_CHANGE_CB): + return ProcessGestureNavigationEnabledChangeRegister(windowManagerListener, window, isRegister, + env); + case static_cast(RegisterListenerType::WATER_MARK_FLAG_CHANGE_CB): + return ProcessWaterMarkFlagChangeRegister(windowManagerListener, window, isRegister, env); + default: + TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", + static_cast(registerListenerType)); + return WmErrorCode::WM_ERROR_INVALID_PARAM; + } } else if (caseType == CaseType::CASE_WINDOW) { - ProcessWindowListener(registerListenerType, windowManagerListener, window, isRegister, env); + switch (static_cast(registerListenerType)) { + case static_cast(RegisterListenerType::WINDOW_SIZE_CHANGE_CB): + return ProcessWindowChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::SYSTEM_AVOID_AREA_CHANGE_CB): + return ProcessSystemAvoidAreaChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::AVOID_AREA_CHANGE_CB): + return ProcessAvoidAreaChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::LIFECYCLE_EVENT_CB): + return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_EVENT_CB): + return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::KEYBOARD_HEIGHT_CHANGE_CB): + return ProcessOccupiedAreaChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::KEYBOARD_DID_SHOW_CB): + return ProcessKeyboardDidShowRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::KEYBOARD_DID_HIDE_CB): + return ProcessKeyboardDidHideRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::TOUCH_OUTSIDE_CB): + return ProcessTouchOutsideRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::SCREENSHOT_EVENT_CB): + return ProcessScreenshotRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::DIALOG_TARGET_TOUCH_CB): + return ProcessDialogTargetTouchRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::DIALOG_DEATH_RECIPIENT_CB): + return ProcessDialogDeathRecipientRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_STATUS_CHANGE_CB): + return ProcessWindowStatusChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_TITLE_BUTTON_RECT_CHANGE_CB): + return ProcessWindowTitleButtonRectChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_VISIBILITY_CHANGE_CB): + return ProcessWindowVisibilityChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_NO_INTERACTION_DETECT_CB): + return ProcessWindowNoInteractionRegister(windowManagerListener, window, isRegister, env, timeout); + case static_cast(RegisterListenerType::WINDOW_RECT_CHANGE_CB): + return ProcessWindowRectChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::SUB_WINDOW_CLOSE_CB): + return ProcessSubWindowCloseRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_HIGHLIGHT_CHANGE_CB): + return ProcessWindowHighlightChangeRegister(windowManagerListener, window, isRegister, env); + default: + TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", + static_cast(registerListenerType)); + return WmErrorCode::WM_ERROR_INVALID_PARAM; + } } else if (caseType == CaseType::CASE_STAGE) { - ProcessWindowStageListener(registerListenerType, windowManagerListener, window, isRegister, env); + switch (registerListenerType) { + case RegisterListenerType::WINDOW_STAGE_EVENT_CB: + return ProcessLifeCycleEventRegister(windowManagerListener, window, isRegister, env); + case RegisterListenerType::WINDOW_STAGE_CLOSE_CB: + return ProcessMainWindowCloseRegister(windowManagerListener, window, isRegister, env); + default: + TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", + static_cast(registerListenerType)); + return WmErrorCode::WM_ERROR_INVALID_PARAM; + } } return WmErrorCode::WM_OK; } @@ -516,29 +519,35 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, st return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; } RegisterListenerType listenerType = iterCallbackType->second; - if (callback == nullptr) { + ani_boolean isUndef = ANI_FALSE; + env->Reference_IsUndefined(callback, &isUndef); + if (isUndef == ANI_TRUE) { + TLOGD(WmsLogTag::DEFAULT, "[ANI]Unregister all callback, type:%{public}s", type.c_str()); for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { - WmErrorCode ret = ProcessListener(listenerType, caseType, it->second, window, false, env); + WmErrorCode ret = ProcessListener(listenerType, caseType, it->second, window, false, env, 0); if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } + env->GlobalReference_Delete(it->second->GetAniCallBack()); jsCbMap_[type].erase(it++); } } else { bool findFlag = false; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end(); ++it) { ani_boolean isEquals = 0; - env->Reference_StrictEquals(callback, it->first, &isEquals); + env->Reference_StrictEquals(callback, it->second->GetAniCallBack(), &isEquals); + TLOGD(WmsLogTag::DEFAULT, "[ANI]callback isEquals:%{public}d", static_cast(isEquals)); if (!isEquals) { continue; } findFlag = true; - WmErrorCode ret = ProcessListener(listenerType, caseType, it->second, window, false, env); + WmErrorCode ret = ProcessListener(listenerType, caseType, it->second, window, false, env, 0); if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } + env->GlobalReference_Delete(it->second->GetAniCallBack()); jsCbMap_[type].erase(it); break; } @@ -606,6 +615,22 @@ WmErrorCode AniWindowRegisterManager::ProcessSubWindowCloseRegister(sptr listener, + sptr window, bool isRegister, ani_env* env) +{ + if (window == nullptr) { + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterWindowHighlightChangeListeners(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterWindowHighlightChangeListeners(thisListener)); + } + return ret; +} + WmErrorCode AniWindowRegisterManager::ProcessMainWindowCloseRegister(const sptr& listener, const sptr& window, bool isRegister, ani_env* env) { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 21cb29abf8..52b9f97200 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -37,7 +37,7 @@ static std::map localObjs; } // namespace AniWindowStage::AniWindowStage(const std::shared_ptr& windowScene) - : windowScene_(windowScene) + : windowScene_(windowScene), registerManager_(std::make_unique()) { } AniWindowStage::~AniWindowStage() @@ -45,18 +45,7 @@ AniWindowStage::~AniWindowStage() TLOGE(WmsLogTag::DEFAULT, "[ANI] Ani WindowStage died"); } -void AniWindowStage::LoadContent(ani_env* env, const std::string& content) -{ - auto weakScene = windowScene_.lock(); - sptr win = weakScene ? weakScene->GetMainWindow() : nullptr; - if (win == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[NAPI]Get window failed"); - return; - } - win->NapiSetUIContent(content, env, nullptr); -} - -ani_object AniWindowStage::GetMainWindow(ani_env* env) +ani_ref AniWindowStage::GetMainWindow(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI] Get main window"); std::shared_ptr weakScene = windowScene_.lock(); @@ -94,15 +83,6 @@ AniWindowStage* GetWindowStageFromAni(void* aniObj) return obj->second; } -static void GetStdString(ani_env* env, ani_string str, std::string& result) -{ - ani_size sz {}; - env->String_GetUTF8Size(str, &sz); - result.resize(sz + 1); - env->String_GetUTF8SubString(str, 0, sz, result.data(), result.size(), &sz); - result.resize(sz); -} - ani_object CreateAniWindowStage(ani_env* env, std::shared_ptr& windowScene) __attribute__((no_sanitize("cfi"))) { @@ -120,11 +100,7 @@ __attribute__((no_sanitize("cfi"))) } std::unique_ptr windowStage = std::make_unique(windowScene); - ani_field contextField; - if ((ret = env->Class_FindField(cls, "nativeObj", &contextField)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] get field fail %{public}u", ret); - return nullptr; - } + TLOGD(WmsLogTag::DEFAULT, "[ANI] native obj %{public}p", windowStage.get()); ani_method initFunc = nullptr; if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { @@ -138,11 +114,13 @@ __attribute__((no_sanitize("cfi"))) } ani_method setObjFunc = nullptr; if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI] call setNativeObj fail %{public}u", ret); return nullptr; } env->Object_CallMethod_Void(obj, setObjFunc, reinterpret_cast(windowStage.get())); localObjs.insert(std::pair(obj, windowStage.release())); + + TLOGD(WmsLogTag::DEFAULT, "[ANI] window stage created %{public}p", reinterpret_cast(obj)); return obj; } @@ -216,7 +194,7 @@ void AniWindowStage::OnSetShowOnLockScreen(ani_env* env, ani_boolean showOnLockS } auto mainWindow = windowScene->GetMainWindow(); if (mainWindow == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] mainWindowis nullptr!"); + TLOGE(WmsLogTag::DEFAULT, "[ANI] mainWindow is nullptr!"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } @@ -227,28 +205,239 @@ void AniWindowStage::OnSetShowOnLockScreen(ani_env* env, ani_boolean showOnLockS } TLOGE(WmsLogTag::DEFAULT, "[ANI] OnSetShowOnLockScreen end!"); } + +void AniWindowStage::RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnRegisterWindowCallback(env, type, callback); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->RegisterListener(mainWindow, cbType, CaseType::CASE_STAGE, env, callback, 0); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + return; + } +} + +void AniWindowStage::UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, + ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnUnregisterWindowCallback(env, type, callback); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string cbType; + AniWindowUtils::GetStdString(env, type, cbType); + TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}s", cbType.c_str()); + WmErrorCode ret = registerManager_->UnregisterListener(mainWindow, cbType, CaseType::CASE_STAGE, env, callback); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + return; + } +} + +void AniWindowStage::SetWindowRectAutoSave(ani_env* env, ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag) +{ + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowScene is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] MainWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(mainWindow->SetWindowRectAutoSave(enabled, isSaveBySpecifiedFlag)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Enable recover position failed!"); + AniWindowUtils::AniThrowError(env, ret); + } else { + TLOGI(WmsLogTag::WMS_MAIN, "[ANI] id %{public}d isSaveBySpecifiedFlag: %{public}d " + "enable:%{public}d", mainWindow->GetWindowId(), isSaveBySpecifiedFlag, enabled); + } +} + +ani_boolean AniWindowStage::IsWindowRectAutoSave(ani_env* env) +{ + TLOGI(WmsLogTag::WMS_LAYOUT_PC, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowScene is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] MainWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + bool enabled = false; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(mainWindow->IsWindowRectAutoSave(enabled)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] Get the auto-save state of the window rect failed!"); + AniWindowUtils::AniThrowError(env, ret); + return ani_boolean(false); + } else { + return ani_boolean(enabled); + } +} + +void AniWindowStage::RemoveStartingWindow(ani_env* env) +{ + TLOGI(WmsLogTag::WMS_STARTUP_PAGE, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] windowScene is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto window = windowScene->GetMainWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] window is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->NotifyRemoveStartingWindow()); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] Notify remove starting window failed"); + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindowStage::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path) +{ + AniWindowStage::LoadContentWithStorage(env, obj, nativeObj, path, nullptr); +} + +void AniWindowStage::LoadContentWithStorage(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, + ani_object storage) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnLoadContentWithStorage(env, path, storage); + } else { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnLoadContentWithStorage(ani_env* env, ani_string path, ani_object storage) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string contentPath; + AniWindowUtils::GetStdString(env, path, contentPath); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(mainWindow->NapiSetUIContent(contentPath, env, storage)); + TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", + mainWindow->GetWindowId(), mainWindow->GetWindowName().c_str(), ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); + } +} } // namespace Rosen } // namespace OHOS -static ani_int WindowStageLoadContent(ani_env* env, ani_object obj, - ani_long nativeObj, ani_string content) +static void SetWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj, + ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag) +{ + using namespace OHOS::Rosen; + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + windowStage->SetWindowRectAutoSave(env, enabled, isSaveBySpecifiedFlag); +} + +static ani_boolean IsWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); - std::string contentStr; - GetStdString(env, content, contentStr); - windowStage->LoadContent(env, contentStr); - return (ani_int)0u; + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + return windowStage->IsWindowRectAutoSave(env); } -static ani_object WindowStageCreate(ani_env* env, ani_long scene) +static void RemoveStartingWindow(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; - std::shared_ptr scenePtr; - return CreateAniWindowStage(env, scenePtr); // just for test + TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] start"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + windowStage->RemoveStartingWindow(env); } -static ani_object WindowGetMainWindow(ani_env* env, ani_object obj, ani_long nativeObj) +static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; TLOGD(WmsLogTag::DEFAULT, "[ANI]"); @@ -277,13 +466,27 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } std::array methods = { - ani_native_function {"loadContent", "JLstd/core/String;:I", reinterpret_cast(WindowStageLoadContent)}, + ani_native_function {"setWindowRectAutoSave", "JZZ:V", + reinterpret_cast(SetWindowRectAutoSave)}, + ani_native_function {"isWindowRectAutoSave", "J:Z", + reinterpret_cast(IsWindowRectAutoSave)}, + ani_native_function {"removeStartingWindow", "J:V", + reinterpret_cast(RemoveStartingWindow)}, + ani_native_function {"loadContent", "JLstd/core/String;:I", + reinterpret_cast(AniWindowStage::LoadContent)}, + ani_native_function {"loadContentSync", + "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + reinterpret_cast(AniWindowStage::LoadContentWithStorage)}, ani_native_function {"disableWindowDecorSync", nullptr, reinterpret_cast(AniWindowStage::DisableWindowDecor)}, ani_native_function {"setShowOnLockScreenSync", nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, ani_native_function {"getMainWindowSync", "J:L@ohos/window/window/Window;", reinterpret_cast(WindowGetMainWindow)}, + ani_native_function {"onSync", nullptr, + reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, + ani_native_function {"offSync", nullptr, + reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, }; if ((ret = env->Class_BindNativeMethods(cls, methods.data(), methods.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind fail %{public}u", ret); @@ -291,23 +494,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } *result = ANI_VERSION_1; - // just for test - ani_namespace ns; - if ((ret = env->FindNamespace("L@ohos/window/window;", &ns)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] find ns %{public}u", ret); - return ANI_NOT_FOUND; - } - std::array functions = { - ani_native_function {"CreateWindowStage", "J:L@ohos/window/window/WindowStageInternal;", - reinterpret_cast(WindowStageCreate)}, - ani_native_function {"getLastWindowSync", nullptr, reinterpret_cast(AniWindowManager::GetLastWindow)}, - }; - if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] bind ns func %{public}u", ret); - return ANI_NOT_FOUND; - } - AniWindowManager::AniWindowManagerInit(env, ns); - + AniWindowManager::AniWindowManagerInit(env); OHOS::Rosen::ANI_Window_Constructor(vm, result); return ANI_OK; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 748a7a2022..cb13080aea 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -22,12 +22,28 @@ #include "ani_err_utils.h" #include "ani_window.h" #include "bundle_constants.h" +#include "foundation/arkui/ace_engine/interfaces/inner_api/ace/ui_content.h" #include "ipc_skeleton.h" #include "window_manager_hilog.h" -#include "ui_content.h" namespace OHOS { namespace Rosen { +namespace { +std::string GetHexColor(uint32_t color) +{ + std::stringstream ioss; + std::string temp; + ioss << std::setiosflags(std::ios::uppercase) << std::hex << color; + ioss >> temp; + int count = RGBA_LENGTH - static_cast(temp.length()); + std::string tmpColor(count, '0'); + tmpColor += temp; + std::string finalColor("#"); + finalColor += tmpColor; + return finalColor; +} +} + ani_status AniWindowUtils::GetStdString(ani_env *env, ani_string ani_str, std::string &result) { ani_size strSize; @@ -244,6 +260,88 @@ ani_object AniWindowUtils::CreateAniSize(ani_env* env, int32_t width, int32_t he return aniRect; } +ani_object AniWindowUtils::CreateAniDecorButtonStyle(ani_env* env, const DecorButtonStyle& decorButtonStyle) +{ + TLOGI(WmsLogTag::WMS_DECOR, "[ANI]"); + ani_class aniClass; + ani_status ret = env->FindClass("L@ohos/window/window/DecorButtonStyle;", &aniClass); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method aniCtor; + ret = env->Class_FindMethod(aniClass, "", nullptr, &aniCtor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object aniDecorButtonStyle; + ret = env->Object_New(aniClass, aniCtor, &aniDecorButtonStyle); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, aniDecorButtonStyle, aniClass, + "colorMode", nullptr, ani_long(decorButtonStyle.colorMode)); + CallAniMethodVoid(env, aniDecorButtonStyle, aniClass, + "buttonBackgroundSize", nullptr, ani_double(decorButtonStyle.buttonBackgroundSize)); + CallAniMethodVoid(env, aniDecorButtonStyle, aniClass, + "spacingBetweenButtons", nullptr, ani_double(decorButtonStyle.spacingBetweenButtons)); + CallAniMethodVoid(env, aniDecorButtonStyle, aniClass, + "closeButtonRightMargin", nullptr, ani_double(decorButtonStyle.closeButtonRightMargin)); + return aniDecorButtonStyle; +} + +ani_object AniWindowUtils::CreateAniTitleButtonRect(ani_env* env, const TitleButtonRect& titleButtonRect) +{ + TLOGI(WmsLogTag::WMS_DECOR, "[ANI]"); + ani_class aniClass; + ani_status ret = env->FindClass("L@ohos/window/window/TitleButtonRect;", &aniClass); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method aniCtor; + ret = env->Class_FindMethod(aniClass, "", nullptr, &aniCtor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object aniTitleButtonRect; + ret = env->Object_New(aniClass, aniCtor, &aniTitleButtonRect); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_DECOR, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, aniTitleButtonRect, aniClass, "right", nullptr, ani_double(titleButtonRect.posX_)); + CallAniMethodVoid(env, aniTitleButtonRect, aniClass, "top", nullptr, ani_double(titleButtonRect.posY_)); + CallAniMethodVoid(env, aniTitleButtonRect, aniClass, "width", nullptr, ani_double(titleButtonRect.width_)); + CallAniMethodVoid(env, aniTitleButtonRect, aniClass, "height", nullptr, ani_double(titleButtonRect.height_)); + return aniTitleButtonRect; +} + +ani_object AniWindowUtils::CreateAniWindowArray(ani_env* env, std::vector& windows) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + ani_array_ref windowArray = nullptr; + ani_class windowCls; + if (env->FindClass("L@ohos/window/window/WindowInternal;", &windowCls) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + if (env->Array_New_Ref(windowCls, windows.size(), CreateAniUndefined(env), &windowArray) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create array fail"); + return AniWindowUtils::CreateAniUndefined(env); + } + for (size_t i = 0; i < windows.size(); i++) { + if (env->Array_Set_Ref(windowArray, i, windows[i]) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] set window array failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + } + return windowArray; +} + ani_object AniWindowUtils::CreateAniRect(ani_env* env, const Rect& rect) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -309,10 +407,6 @@ ani_object AniWindowUtils::CreateAniAvoidArea(ani_env* env, const AvoidArea& avo ani_object AniWindowUtils::CreateAniKeyboardInfo(ani_env* env, const KeyboardPanelInfo& keyboardPanelInfo) { TLOGI(WmsLogTag::WMS_KEYBOARD, "[ANI]"); - if (env == nullptr) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] null env"); - return AniWindowUtils::CreateAniUndefined(env); - } ani_class aniClass; ani_status ret = env->FindClass("L@ohos/window/window/KeyboardInfoInternal;", &aniClass); if (ret != ANI_OK) { @@ -336,13 +430,93 @@ ani_object AniWindowUtils::CreateAniKeyboardInfo(ani_env* env, const KeyboardPan return keyboardInfo; } +ani_object AniWindowUtils::CreateAniSystemBarTintState(ani_env* env, DisplayId displayId, + const SystemBarRegionTints& tints) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + ani_class aniClass; + if (env->FindClass("L@ohos/window/window/SystemBarTintStateInternal;", &aniClass) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method aniCtor; + if (env->Class_FindMethod(aniClass, "", nullptr, &aniCtor) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object state; + if (env->Object_New(aniClass, aniCtor, &state) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, state, aniClass, "displayId", nullptr, static_cast(displayId)); + ani_array_ref regionTintArray = nullptr; + ani_class regionTintCls; + if (env->FindClass("L@ohos/window/window/SystemBarRegionTintInternal;", ®ionTintCls) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + if (env->Array_New_Ref(regionTintCls, tints.size(), CreateAniUndefined(env), ®ionTintArray) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create array failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + for (size_t i = 0; i < tints.size(); i++) { + if (env->Array_Set_Ref(regionTintArray, i, CreateAniSystemBarRegionTint(env, tints[i])) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create region tint failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + } + CallAniMethodVoid(env, state, aniClass, "regionTint", nullptr, regionTintArray); + return state; +} + +ani_object AniWindowUtils::CreateAniSystemBarRegionTint(ani_env* env, const SystemBarRegionTint& tint) +{ + ani_class regionTintCls; + if (env->FindClass("L@ohos/window/window/SystemBarRegionTintInternal;", ®ionTintCls) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method regionTintCtor; + if (env->Class_FindMethod(regionTintCls, "", nullptr, ®ionTintCtor) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object regionTint; + if (env->Object_New(regionTintCls, regionTintCtor, ®ionTint) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + if (NATIVE_JS_TO_WINDOW_TYPE_MAP.count(tint.type_) != 0) { + CallAniMethodVoid(env, regionTint, regionTintCls, "type", nullptr, + ani_long(NATIVE_JS_TO_WINDOW_TYPE_MAP.at(tint.type_))); + } else { + CallAniMethodVoid(env, regionTint, regionTintCls, "type", nullptr, ani_long(tint.type_)); + } + CallAniMethodVoid(env, regionTint, regionTintCls, "isEnable", nullptr, ani_boolean(tint.prop_.enable_)); + ani_string backgroundColor; + if (GetAniString(env, GetHexColor(tint.prop_.backgroundColor_), &backgroundColor) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, regionTint, regionTintCls, "backgroundColor", nullptr, backgroundColor); + ani_string contentColor; + if (GetAniString(env, GetHexColor(tint.prop_.contentColor_), &contentColor) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, regionTint, regionTintCls, "contentColor", nullptr, contentColor); + CallAniMethodVoid(env, regionTint, regionTintCls, "region", nullptr, CreateAniRect(env, tint.region_)); + return regionTint; +} + ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { ani_status ret = ANI_OK; ani_namespace aniNamespace{}; if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns %{public}d", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns:%{public}s ret:%{public}d", ns, ret); return ret; } ani_function func{}; @@ -884,4 +1058,4 @@ void AniWindowUtils::GetSpecificBarStatus(sptr& window, const std::strin SystemBarSettingFlag::ENABLE_SETTING; } } // namespace Rosen -} // namespace OHOS \ No newline at end of file +} // namespace OHOS -- Gitee From 3189e07cb746aa6f23471616e269a90b5bcf2691 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Wed, 9 Jul 2025 14:27:28 +0800 Subject: [PATCH 006/109] 0328 sync to 0702 Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window.cpp | 11 +++++++---- .../window_stage_ani/src/ani_window_stage.cpp | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 3b4181d2cb..cc285ec960 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -2741,7 +2741,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"loadContentSync", "JLstd/core/String;:V", reinterpret_cast(AniWindow::LoadContent)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", reinterpret_cast(AniWindow::LoadContentNew)}, ani_native_function {"setWindowKeepScreenOnSync", "JZ:V", reinterpret_cast(AniWindow::SetWindowKeepScreenOn)}, @@ -2786,9 +2786,12 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"showWithAnimationSync", nullptr, reinterpret_cast(AniWindow::ShowWithAnimation)}, }; - if ((ret = env->Class_BindNativeMethods(cls, methods.data(), methods.size())) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u", ret); - return ANI_NOT_FOUND; + for (auto method : methods) { + if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", + ret, method.name, method.signature); + return ANI_NOT_FOUND; + } } *result = ANI_VERSION_1; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 52b9f97200..066b8f2ea8 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -475,7 +475,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"loadContent", "JLstd/core/String;:I", reinterpret_cast(AniWindowStage::LoadContent)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", reinterpret_cast(AniWindowStage::LoadContentWithStorage)}, ani_native_function {"disableWindowDecorSync", nullptr, reinterpret_cast(AniWindowStage::DisableWindowDecor)}, @@ -488,9 +488,12 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, }; - if ((ret = env->Class_BindNativeMethods(cls, methods.data(), methods.size())) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] bind fail %{public}u", ret); - return ANI_NOT_FOUND; + for (auto method : methods) { + if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", + ret, method.name, method.signature); + return ANI_NOT_FOUND; + } } *result = ANI_VERSION_1; -- Gitee From 21ea6052b59d5236667c7f8a5a44776a2e490404 Mon Sep 17 00:00:00 2001 From: yanxinyu7 Date: Tue, 27 May 2025 16:42:25 +0800 Subject: [PATCH 007/109] =?UTF-8?q?ani=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yanxinyu7 --- .../window_stage_ani/ets/@ohos.window.ets | 180 ++++++++++++++++++ .../include/ani_window_manager.h | 2 + .../include/ani_window_stage.h | 1 + .../src/ani_window_listener.cpp | 15 ++ .../src/ani_window_manager.cpp | 149 +++++++++++++++ .../window_stage_ani/src/ani_window_stage.cpp | 38 ++++ 6 files changed, 385 insertions(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 4fdd82e411..b762f48abb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1125,6 +1125,137 @@ export class WindowPropertiesInternal implements WindowProperties { typeInternal: int; } +/** + * Configuration parameters for window creation. + * + * @interface Configuration + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ +/** + * Configuration parameters for window creation. + * + * @interface Configuration + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ +export interface Configuration { + /** + * Indicates window id. + * + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ + /** + * Indicates window id. + * + * @type { string } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ + name: string; + + /** + * Indicates window type + * + * @type { WindowType } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ + /** + * Indicates window type + * + * @type { WindowType } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ + windowType: WindowType; + + /** + * Indicates window context. + * + * @type { ?BaseContext } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ + /** + * Indicates window context. + * + * @type { ?BaseContext } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ + ctx?: BaseContext; + + /** + * Indicates display ID. + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ + /** + * Indicates display ID. + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ + displayId?: number; + + /** + * Indicates Parent window id + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @since 9 + */ + /** + * Indicates Parent window id + * + * @type { ?number } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 12 + */ + parentId?: number; + + /** + * Indicates whether enable window decor, only support dialog, The default value is false. + * + * @type { ?boolean } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + decorEnabled?: boolean; + + /** + * Indicates dialog window title when decor enabled. + * + * @type { ?string } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 12 + */ + title?: string; +} + +export class ConfigurationInternal implements Configuration { + name: string; + windowType: WindowType; + ctx?: BaseContext; + displayId?: number; + parentId?: number; + decorEnabled?: boolean; + title?: string; +} + export interface MoveConfiguration { displayId: number; } @@ -1610,6 +1741,7 @@ export class WindowStageInternal implements WindowStage { public native disableWindowDecorSync(nativeObj:long): void; public native setShowOnLockScreenSync(nativeObj:long, showOnLockScreen: boolean): void; public native getMainWindowSync(nativeObj: long): Window; + public native createSubWindowSync(nativeObj: long, name: String): Window; native onSync(nativeObj: long, eventType: 'windowStageEvent', callback: Object): void; native offSync(nativeObj: long, eventType: 'windowStageEvent', callback?: Object): void; @@ -1735,6 +1867,29 @@ export class WindowStageInternal implements WindowStage { }); } + public createSubWindow(name: string): Promise { + return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { + taskpool.execute((): Window => { + let window = this.createSubWindowSync(this.nativeObj, name); + return window; + }).then((ret: NullishType) => { + resolve(ret as Window); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public createSubWindow(name: string, callback: AsyncCallback): void { + taskpool.execute((): Window => { + let res = this.createSubWindowSync(this.nativeObj, name); + return res; + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as Window); + }).catch((err: NullishType) => { + }); + } + public on(eventType: 'windowStageEvent', callback: Callback): void { this.onSync(this.nativeObj, eventType, callback); } @@ -1756,6 +1911,8 @@ export interface WindowStage { getMainWindowSync(): Window; getMainWindow(): Promise; getMainWindow(callback: AsyncCallback): void; + createSubWindow(name: string): Promise; + createSubWindow(name: string, callback: AsyncCallback): void; disableWindowDecor(): void; setShowOnLockScreen(showOnLockScreen: boolean): void; on(eventType: 'windowStageEvent', callback: Callback): void; @@ -2805,6 +2962,7 @@ native function findWindowSync(nativeObj: long, name: string): Window; native function onSync(nativeObj: long, type: string, callback: object): void; native function offSync(nativeObj: long, type: string, callback?: object): void; native function shiftAppWindowFocusSync(nativeObj: long, sourceWindowId: number, targetWindowId: number): void; +native function createWindowSync(nativeObj: long, config: Configuration): Window; export function getLastWindow(ctx: BaseContext): Promise { return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { @@ -2830,6 +2988,28 @@ export function getLastWindow(ctx: BaseContext, callback: AsyncCallback) }); } +export function createWindow(config: Configuration): Promise { + return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): Window => { + return createWindowSync(nativeObj, config); + }).then((ret: NullishType) => { + resolve(ret as Window); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function createWindow(config: Configuration, callback: AsyncCallback): void { + taskpool.execute((): Window => { + return createWindowSync(nativeObj, config); + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as Window); + }).catch((err: NullishType) => { + callback(err as BusinessError, new WindowInternal()); + }); +} + export function minimizeAll(id: number): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h index 16ce5fcac2..b2a255612a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h @@ -37,6 +37,7 @@ public: static ani_object GetWindowsByCoordinate(ani_env* env, ani_long nativeObj, ani_object getWindowsParam); static ani_ref GetLastWindow(ani_env* env, ani_long nativeObj, ani_object context); static ani_ref FindWindow(ani_env* env, ani_long nativeObj, ani_string windowName); + static ani_ref CreateWindow(ani_env* env, ani_long nativeObj, ani_object configuration); static void MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId); static void RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); @@ -46,6 +47,7 @@ private: ani_object OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam); ani_ref OnGetLastWindow(ani_env* env, ani_object context); ani_ref OnFindWindow(ani_env* env, ani_string windowName); + ani_ref OnCreateWindow(ani_env* env, ani_object configuration); void OnMinimizeAll(ani_env* env, ani_double displayId); void OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId); ani_object GetTopWindowTask(ani_env* env, void* contextPtr, bool newApi); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h index f00f7c0221..e1df269730 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h @@ -49,6 +49,7 @@ class AniWindowStage { std::weak_ptr GetWindowScene() { return windowScene_; } ani_ref GetMainWindow(ani_env* env); ani_boolean WindowIsWindowSupportWideGamut(ani_env* env, ani_class cls, ani_object obj); + ani_ref OnCreateSubWindow(ani_env *env, ani_string name); private: void OnDisableWindowDecor(ani_env* env); void OnSetShowOnLockScreen(ani_env* env, ani_boolean showOnLockScreen); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index d3bd0a9195..a54456fbd3 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -463,6 +463,21 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) { + TLOGI(WmsLogTag::WMS_SUB, "[ANI]"); + auto task = [self = weakRef_, eng = env_, terminateCloseProcess] { + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr) { + TLOGNE(WmsLogTag::WMS_SUB, "[ANI]this listener or eng is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + nullptr, thisListener->aniCallBack_, ani_boolean(terminateCloseProcess)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } void AniWindowListener::OnMainWindowClose(bool& terminateCloseProcess) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 790ea41edc..19e825f93a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -28,6 +28,10 @@ #include "window_manager_hilog.h" #include "window_scene.h" #include "ani_window_utils.h" +#include "ability_context.h" +#include "window_option.h" +#include "window_helper.h" +#include "permission.h" namespace OHOS { namespace Rosen { @@ -69,6 +73,9 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindowManager::UnregisterWindowManagerCallback)}, ani_native_function {"windowDestroyCallback", nullptr, reinterpret_cast(AniWindow::Finalizer)}, + ani_native_function {"createWindowSync", + "JL@ohos/window/window/Configuration;:L@ohos/window/window/Window;", + reinterpret_cast(AniWindowManager::CreateWindow)}, }; if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind ns func %{public}u", ret); @@ -200,6 +207,148 @@ ani_ref AniWindowManager::OnFindWindow(ani_env* env, ani_string windowName) } } +ani_ref CreateAniSystemWindow(ani_env* env, void* contextPtr, sptr windowOption) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + if (windowOption == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_SYSTEM_ABNORMALLY); + } + auto context = static_cast*>(contextPtr); + if (contextPtr == nullptr || context == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_CONTEXT_ABNORMALLY, + "[ANI] Context is nullptr"); + } + if (windowOption->GetWindowType() == WindowType::WINDOW_TYPE_FLOAT || + windowOption->GetWindowType() == WindowType::WINDOW_TYPE_FLOAT_CAMERA) { + auto abilityContext = AbilityRuntime::Context::ConvertTo(context->lock()); + if (abilityContext != nullptr) { + if (!Permission::CheckCallingPermission("ohos.permission.SYSTEM_FLOAT_WINDOW")) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NO_PERMISSION, + "[ANI] TYPE_FLOAT CheckCallingPermission failed"); + } + } + } + WMError wmError = WMError::WM_OK; + sptr window = Window::Create(windowOption->GetWindowName(), windowOption, context->lock(), wmError); + WmErrorCode wmErrorCode = WM_JS_TO_ERROR_CODE_MAP.at(wmError); + if (window == nullptr && wmErrorCode != WmErrorCode::WM_OK) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } else { + return CreateAniWindowObject(env, window); + } +} + +ani_ref CreateAniSubWindow(ani_env* env, sptr windowOption) +{ + if (windowOption == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_SYSTEM_ABNORMALLY); + } + windowOption->SetWindowMode(Rosen::WindowMode::WINDOW_MODE_FLOATING); + if (windowOption->GetParentId() == INVALID_WINDOW_ID) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY, + "[ANI] Parent window missed"); + } + + sptr window = Window::Create(windowOption->GetWindowName(), windowOption); + if (window == nullptr) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } else { + return CreateAniWindowObject(env, window); + } +} + +ani_ref AniWindowManager::CreateWindow(ani_env* env, ani_long nativeObj, ani_object configuration) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnCreateWindow(env, configuration) : nullptr; +} + +bool ParseRequiredConfigOption(ani_env* env, ani_object configuration, WindowOption &option) +{ + ani_ref result; + env->Object_GetPropertyByName_Ref(configuration, "name", &result); + ani_string aniWindowName = reinterpret_cast(result); + std::string windowName; + AniWindowUtils::GetStdString(env, aniWindowName, windowName); + TLOGI(WmsLogTag::DEFAULT, "[ANI] WindowName: %{public}s", windowName.c_str()); + option.SetWindowName(windowName); + + ani_int ret; + env->Object_GetPropertyByName_Ref(configuration, "windowType", &result); + auto status = env->EnumItem_GetValue_Int(static_cast(result), &ret); + if (status != ANI_OK) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] Fail to throw err, status: %{public}d", static_cast(status)); + return false; + } + uint32_t winType = static_cast(ret); + TLOGI(WmsLogTag::DEFAULT, "[ANI] winType: %{public}u", winType); + if (winType >= static_cast(ApiWindowType::TYPE_BASE) && + winType < static_cast(ApiWindowType::TYPE_END)) { + option.SetWindowType(JS_TO_NATIVE_WINDOW_TYPE_MAP.at(static_cast(winType))); + } else { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Invalid winType"); + return false; + } + return true; +} + +bool ParseConfigOption(ani_env* env, ani_object configuration, WindowOption &option, void*& contextPtr) +{ + if (!ParseRequiredConfigOption(env, configuration, option)) { + return false; + } + + ani_ref result; + env->Object_GetPropertyByName_Ref(configuration, "title", &result); + ani_string aniDialogTitle = reinterpret_cast(result); + std::string dialogTitle; + AniWindowUtils::GetStdString(env, aniDialogTitle, dialogTitle); + TLOGI(WmsLogTag::DEFAULT, "[ANI] dialogTitle: %{public}s", dialogTitle.c_str()); + option.SetDialogTitle(dialogTitle); + + env->Object_GetPropertyByName_Ref(configuration, "ctx", &result); + ani_object aniContextPtr = reinterpret_cast(result); + contextPtr = AniWindowUtils::GetAbilityContext(env, aniContextPtr); + + ani_boolean dialogDecorEnable; + env->Object_GetPropertyByName_Boolean(configuration, "decorEnabled", &dialogDecorEnable); + option.SetDialogDecorEnable(dialogDecorEnable); + + ani_double ret; + env->Object_GetPropertyByName_Double(configuration, "displayId", &ret); + int64_t displayId = static_cast(ret); + if (displayId < 0 || + SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] DisplayId is invalid"); + return false; + } + option.SetDisplayId(displayId); + + env->Object_GetPropertyByName_Double(configuration, "parentId", &ret); + int64_t parentId = static_cast(ret); + option.SetParentId(parentId); + + return true; +} + +ani_ref AniWindowManager::OnCreateWindow(ani_env* env, ani_object configuration) +{ + WindowOption option; + void* contextPtr = nullptr; + if (!ParseConfigOption(env, configuration, option, contextPtr)) { + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM, "[ANI] Failed to parse config"); + } + sptr windowOption = new WindowOption(option); + if (WindowHelper::IsSystemWindow(option.GetWindowType())) { + return CreateAniSystemWindow(env, contextPtr, windowOption); + } else if (WindowHelper::IsSubWindow(option.GetWindowType())) { + return CreateAniSubWindow(env, windowOption); + } else { + return AniWindowUtils::AniThrowError(env, WMError::WM_ERROR_NULLPTR, "[ANI] Create window failed"); + } +} + void AniWindowManager::MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId) { TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 066b8f2ea8..e5f61e5901 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -394,6 +394,30 @@ void AniWindowStage::OnLoadContentWithStorage(ani_env* env, ani_string path, ani AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); } } + +ani_ref AniWindowStage::OnCreateSubWindow(ani_env* env, ani_string name) +{ + std::string windowName; + ani_status ret = AniWindowUtils::GetStdString(env, name, windowName); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] invalid param of name"); + return AniWindowUtils::CreateAniUndefined(env); + } + + auto weakScene = windowScene_.lock(); + if (weakScene == nullptr) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] WindowScene is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + sptr windowOption = new Rosen::WindowOption(); + windowOption->SetWindowType(Rosen::WindowType::WINDOW_TYPE_APP_SUB_WINDOW); + windowOption->SetWindowMode(Rosen::WindowMode::WINDOW_MODE_FLOATING); + auto window = weakScene->CreateWindow(windowName, windowOption); + if (window == nullptr) { + return AniWindowUtils::CreateAniUndefined(env); + } + return CreateAniWindowObject(env, window); +} } // namespace Rosen } // namespace OHOS @@ -449,6 +473,18 @@ static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long native return windowStage->GetMainWindow(env); } +static ani_ref CreateSubWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_string name) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::DEFAULT, "[ANI] windowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return windowStage->OnCreateSubWindow(env, name); +} + extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { @@ -483,6 +519,8 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, ani_native_function {"getMainWindowSync", "J:L@ohos/window/window/Window;", reinterpret_cast(WindowGetMainWindow)}, + ani_native_function {"createSubWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", + reinterpret_cast(CreateSubWindow)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, -- Gitee From 59774374ef515fb21a6176cb8ba9a913dca139b1 Mon Sep 17 00:00:00 2001 From: kaicui Date: Fri, 11 Jul 2025 11:47:46 +0800 Subject: [PATCH 008/109] Fix setWindowTouchable problems Signed-off-by: kaicui --- .../window_stage_ani/ets/@ohos.window.ets | 10 +++++----- .../window_stage_ani/include/ani_window.h | 2 +- .../window_stage_ani/src/ani_window.cpp | 20 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 4fdd82e411..a617814bd1 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1836,7 +1836,7 @@ export class WindowInternal implements Window { private native showWithAnimationSync(nativeObj: long): void; private native setWindowFocusableSync(nativeObj: long, isFocusable: boolean): void; - private native setWindowTouchableSync(nativeObj: long, enable: boolean): void; + private native setWindowTouchableSync(nativeObj: long, isTouchable: boolean): void; private native onNoInteractionDetected(nativeObj: long, type: string, timeout: number, callback: Object): void; private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; private native onSync(nativeObj: long, type: string, callback: object): void; @@ -2545,10 +2545,10 @@ export class WindowInternal implements Window { this.keepKeyboardOnFocusSync(this.nativeObj, keepKeyboardFlag); } - public setWindowTouchable(enable: boolean): Promise { + public setWindowTouchable(isTouchable: boolean): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { - this.setWindowTouchableSync(this.nativeObj, enable); + this.setWindowTouchableSync(this.nativeObj, isTouchable); }).then((ret: NullishType) => { resolve(undefined); }).catch((err: NullishType) => { @@ -2557,9 +2557,9 @@ export class WindowInternal implements Window { }); } - public setWindowTouchable(enable: boolean, callback: AsyncCallback): void { + public setWindowTouchable(isTouchable: boolean, callback: AsyncCallback): void { taskpool.execute((): void => { - this.setWindowTouchableSync(this.nativeObj, enable); + this.setWindowTouchableSync(this.nativeObj, isTouchable); }).then((ret: NullishType) => { callback(new BusinessError(), undefined); }).catch((err: NullishType) => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b1043f8a31..dfa5dc6518 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -48,7 +48,7 @@ public: static void SetWindowKeepScreenOn(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isKeepScreenOn); static void SetWaterMarkFlag(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enable); static void SetWindowFocusable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isFocusable); - static void setWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isTouchable); + static void SetWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isTouchable); static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path); static void LoadContentNew(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index cc285ec960..eb730706da 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -681,28 +681,28 @@ void AniWindow::OnSetWindowFocusable(ani_env* env, ani_boolean isFocusable) } } -void AniWindow::setWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isKeepScreenOn) +void AniWindow::SetWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isTouchable) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_EVENT, "[ANI] in"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_EVENT, "[ANI] aniWindow is nullptr"); return; } - aniWindow->OnSetWindowKeepScreenOn(env, isKeepScreenOn); - TLOGI(WmsLogTag::DEFAULT, "[ANI] setWindowTouchable end"); + aniWindow->OnSetWindowTouchable(env, isTouchable); + TLOGI(WmsLogTag::WMS_EVENT, "[ANI] end"); } -void AniWindow::OnSetWindowTouchable(ani_env* env, ani_boolean isKeepScreenOn) +void AniWindow::OnSetWindowTouchable(ani_env* env, ani_boolean isTouchable) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_EVENT, "[ANI] in"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_EVENT, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTouchable(static_cast(isKeepScreenOn))); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetTouchable(static_cast(isTouchable))); if (ret != WmErrorCode::WM_OK) { AniWindowUtils::AniThrowError(env, ret, "Window set touchable on failed"); } @@ -2758,7 +2758,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"keepKeyboardOnFocusSync", "JZ:V", reinterpret_cast(AniWindow::KeepKeyboardOnFocus)}, ani_native_function {"setWindowTouchableSync", "JZ:V", - reinterpret_cast(AniWindow::setWindowTouchable)}, + reinterpret_cast(AniWindow::SetWindowTouchable)}, ani_native_function {"onNoInteractionDetected", nullptr, reinterpret_cast(AniWindow::RegisterNoInteractionDetectedCallback)}, ani_native_function {"opacity", "JD:V", -- Gitee From 34b966ca6c5c263e5d5b44347047de6583859e4d Mon Sep 17 00:00:00 2001 From: chenpeng Date: Sat, 12 Jul 2025 17:02:12 +0800 Subject: [PATCH 009/109] =?UTF-8?q?ani0603=E5=88=86=E6=94=AF=E5=9B=9E?= =?UTF-8?q?=E5=90=880702=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- interfaces/kits/ani/BUILD.gn | 1 + .../display_ani/ets/@ohos.display.ets | 156 ++++++++++- .../display_ani/include/display_ani.h | 17 +- .../display_ani/include/display_ani_manager.h | 4 + .../display_ani/include/display_ani_utils.h | 5 + .../display_ani/src/ani_err_utils.cpp | 6 +- .../display_ani/src/display_ani.cpp | 246 +++++++++++++++++- .../display_ani/src/display_ani_listener.cpp | 135 ++++++++++ .../display_ani/src/display_ani_manager.cpp | 105 +++++++- .../display_ani/src/display_ani_utils.cpp | 37 ++- interfaces/kits/ani/screen_runtime/BUILD.gn | 1 + .../screen_ani/ets/@ohos.screen.ets | 216 +++++++++++++++ .../screen_ani/include/screen_ani.h | 35 +++ .../screen_ani/include/screen_ani_manager.h | 2 + .../screen_ani/include/screen_ani_utils.h | 11 + .../screen_ani/src/ani_err_utils.cpp | 4 +- .../screen_ani/src/screen_ani.cpp | 48 ++++ .../screen_ani/src/screen_ani_listener.cpp | 86 +++++- .../screen_ani/src/screen_ani_manager.cpp | 78 +++++- .../screen_ani/src/screen_ani_utils.cpp | 98 +++++++ .../kits/ani/screenshot_runtime/BUILD.gn | 89 +++++++ .../screenshot_ani/BUILD.gn | 30 +++ .../screenshot_ani/arktsconfig.json | 36 +++ .../screenshot_ani/ets/@ohos.screenshot.ets | 121 +++++++++ .../screenshot_ani/include/ani_err_utils.h | 38 +++ .../include/screenshot_ani_manager.h | 56 ++++ .../include/screenshot_ani_utils.h | 46 ++++ .../screenshot_ani/src/ani_err_utils.cpp | 146 +++++++++++ .../src/screenshot_ani_manager.cpp | 150 +++++++++++ .../src/screenshot_ani_utils.cpp | 146 +++++++++++ 30 files changed, 2111 insertions(+), 38 deletions(-) create mode 100644 interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h create mode 100644 interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp create mode 100644 interfaces/kits/ani/screenshot_runtime/BUILD.gn create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/BUILD.gn create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/arktsconfig.json create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/ani_err_utils.h create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp create mode 100644 interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp diff --git a/interfaces/kits/ani/BUILD.gn b/interfaces/kits/ani/BUILD.gn index a142a7e1c4..4c0d3cc305 100644 --- a/interfaces/kits/ani/BUILD.gn +++ b/interfaces/kits/ani/BUILD.gn @@ -18,6 +18,7 @@ group("ani_packages") { "display_runtime:display_ani", "embeddable_window_stage:embeddable_window_stage_ani", "screen_runtime:screen_ani", + "screenshot_runtime:screenshot_ani", "window_runtime:window_stage_ani_pack", ] } diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index ba2f154c02..f9eee9b2cf 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -16,6 +16,10 @@ import type { AsyncCallback, Callback} from '@ohos.base'; import { BusinessError } from '@ohos.base'; import colorSpaceManager from '@ohos.graphics.colorSpaceManager'; import hdrCapability from '@ohos.graphics.hdrCapability'; +import hilog from '@ohos.hilog'; + +const DOMAIN = 0x4201; +const TAG = '[ANI]'; export default namespace display { @@ -200,6 +204,15 @@ export interface Display { getCutoutInfo(callback: AsyncCallback): void; getCutoutInfo(): Promise; + + getAvailableArea(): Promise; + + hasImmersiveWindow(callback: AsyncCallback): void; + + hasImmersiveWindow(): Promise; + + on(type: string, callback: Callback): void; + off(type: string, callback?: Callback): void; } export class DisplayImpl implements Display { @@ -217,6 +230,7 @@ export class DisplayImpl implements Display { alive: boolean; state: DisplayState; + state_: int; refreshRate: double; @@ -233,6 +247,7 @@ export class DisplayImpl implements Display { densityDPI: double; orientation: Orientation; + orientation_: int; densityPixels: double; @@ -246,9 +261,15 @@ export class DisplayImpl implements Display { hdrFormats: Array; + displayRef: long; + + setDisplayRef(nativeObj : long) : void{ + this.displayRef = nativeObj; + } + getCutoutInfo(callback: AsyncCallback): void { taskpool.execute((): CutoutInfo => { - let res: CutoutInfo = new CutoutInfoImpl() + let res: CutoutInfo = new CutoutInfoImpl(); this.getCutoutInfoInternal(res); minusRectArray(res.boundingRects); return res; @@ -274,8 +295,55 @@ export class DisplayImpl implements Display { }); } - public native getCutoutInfoInternal(cutoutInfo: CutoutInfo): void; + hasImmersiveWindow(callback: AsyncCallback): void { + taskpool.execute((): boolean => { + return this.hasImmersiveWindowInternal(); + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as boolean); + }).catch((err: NullishType) => { + callback(err as BusinessError, false); + }); + } + hasImmersiveWindow(): Promise { + return new Promise((resolve: (value: boolean) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): boolean => { + return this.hasImmersiveWindowInternal(); + }).then((ret: NullishType) => { + resolve(ret as boolean); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + getAvailableArea(): Promise { + return new Promise((resolve: (value: Rect) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): Rect => { + let res: Rect = new RectImpl(); + this.getAvailableAreaInternal(res); + return res; + }).then((ret: NullishType) => { + resolve(ret as Rect); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }) + } + + on(type: string, callback: Callback): void { + this.syncOn(type, callback as object); + } + off(type: string, callback?: Callback): void { + this.syncOff(type, callback as object); + } + + native syncOn(type: string, callback: object): void; + native syncOff(type: string, callback?: object): void; + + native getAvailableAreaInternal(rect: Rect): void; + native getCutoutInfoInternal(cutoutInfo: CutoutInfo): void; + native hasImmersiveWindowInternal(): boolean; } function minusRectArray(rectArr: Array): void { @@ -290,6 +358,8 @@ function minusRectArray(rectArr: Array): void { export native function isFoldable(): boolean; +export native function isCaptured(): boolean; + export function getFoldDisplayMode(): FoldDisplayMode { let res = getFoldDisplayModeNative(); return res as FoldDisplayMode; @@ -328,16 +398,20 @@ export native function getCurrentFoldCreaseRegionNative(foldCreaseRegion: object // display sync interfaces export function getDisplayByIdSync(displayId: number): Display { - let display:Display = new DisplayImpl(); + let display = new DisplayImpl(); getDisplayByIdSyncNative(display as object, displayId); + display.state = display.state_ as DisplayState; + display.orientation = display.orientation_ as Orientation; return display; } export native function getDisplayByIdSyncNative(obj: object, displayId: number): void; export function getDefaultDisplaySync(): Display { - let display:Display = new DisplayImpl(); + let display = new DisplayImpl(); getDefaultDisplaySyncNative(display as object); + display.state = display.state_ as DisplayState; + display.orientation = display.orientation_ as Orientation; return display; } @@ -346,6 +420,7 @@ export native function getDefaultDisplaySyncNative(obj: object): void; export native function getAllDisplaysSyncNative(displayArray: Array): void; export function getAllDisplays(callback: AsyncCallback>): void { + hilog.info(DOMAIN, TAG, 'get all display from ani'); let res: Array = new Array(DISPLAY_ARRAY_LENGTH); for (let i = 0; i < res.length; i++) { res[i] = new DisplayImpl(); @@ -355,6 +430,7 @@ export function getAllDisplays(callback: AsyncCallback>): void { minusDisplayArray(res); callback(new BusinessError(), res); } catch (err: BusinessError) { + hilog.error(DOMAIN, TAG, 'get all display from err'); callback(err, res); } return; @@ -383,6 +459,9 @@ function minusDisplayArray(displayArr: Array): void { if (displayArr[i].width == 0) { break; } + let dp = displayArr[i] as DisplayImpl; + dp.state = dp.state_ as DisplayState; + dp.orientation = dp.orientation_ as Orientation; } displayArr.splice(i); } @@ -418,6 +497,75 @@ export function foldDisplayModeCallback(cb: object, cbArg: int): void { func(cbArg as FoldDisplayMode); } +export function foldAngleChangeCallback(cb: object, cbArg: object): void { + const func = cb as (cbArg: Array) => void; + func(cbArg as Array); +} + +export function captureStatusChangedCallback(cb: object, cbArg: boolean): void { + const func = cb as (cbArg: boolean) => void; + func(cbArg as boolean); +} + +export function availableAreaChangedCallback(cb: object, cbArg: object): void { + const func = cb as (cbArg: Rect) => void; + func(cbArg as Rect); +} + +export native function hasPrivateWindow(displayId: number): boolean; + +export function getAllDisplayPhysicalResolution(): Promise> { + return new Promise>((resolve: (value: Array) => void, + reject: (error: BusinessError) => void ) => { + taskpool.execute((): Array => { + let res: Array = new Array(5); + for (let i = 0; i < res.length; i++) { + res[i] = new DisplayPhysicalResolutionImpl(); + } + getAllDisplayPhysicalResolutionNative(res, displayMgrRef); + minusResolutionArray(res); + return res; + }).then((ret: NullishType) => { + resolve(ret as Array); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +function minusResolutionArray(resolutions: Array): void { + let i = 0; + for (; i < resolutions.length; i++) { + if (resolutions[i].physicalWidth == 0) { + break; + } + let resolution = resolutions[i] as DisplayPhysicalResolutionImpl; + resolution.foldDisplayMode = resolution.foldDisplayMode_ as FoldDisplayMode; + } + resolutions.splice(i); +} + +export native function getAllDisplayPhysicalResolutionNative(PhysicalResolutions: Array, nativeObj: long): void; + +export interface DisplayPhysicalResolution { + + foldDisplayMode: FoldDisplayMode; + + physicalWidth: number; + + physicalHeight: number; +} + +export class DisplayPhysicalResolutionImpl implements DisplayPhysicalResolution{ + + foldDisplayMode: FoldDisplayMode; + foldDisplayMode_: int; + + physicalWidth: number; + + physicalHeight: number; +} + export let displayMgrRef: long; export function setDisplayMgrRef(nativeObj : long) : void{ diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index 5c6fd9778f..ec4d4e888a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -17,15 +17,30 @@ #include "ani.h" #include "display.h" +#include "display_ani_listener.h" namespace OHOS { namespace Rosen { class DisplayAni { public: - explicit DisplayAni(const std::shared_ptr& display); + explicit DisplayAni(const sptr& display); static void getCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj); + static void getAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj); + static ani_boolean HasImmersiveWindow(ani_env* env, ani_object obj); + static void RegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); + static void UnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); + static void CreateDisplayAni(sptr display, ani_object displayAni, ani_env* env); + void OnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); + void OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); +private: + DMError UnregisterAllDisplayListenerWithType(std::string type); + DMError UnregisterDisplayListenerWithType(std::string type, ani_env *env, ani_ref aniCallback); + bool IsCallbackRegistered(ani_env* env, ani_string& type, ani_ref callback); + sptr display_ = nullptr; + std::map>> jsCbMap_; + std::mutex mtx_; }; } // namespace Rosen } // namespace OHOS diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h index 62f9af2f3d..cc6c6b17c9 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h @@ -30,6 +30,7 @@ public: static ani_int getFoldDisplayModeAni(ani_env* env); static ani_boolean isFoldableAni(ani_env* env); static ani_int getFoldStatus(ani_env* env); + static ani_boolean IsCaptured(ani_env* env); static void getCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj); static void getAllDisplaysAni(ani_env* env, ani_object arrayObj); @@ -44,10 +45,13 @@ public: DMError UnregisterAllDisplayListenerWithType(std::string type); DmErrorCode processRegisterCallback(ani_env* env, std::string& typeStr, sptr displayAniListener); + static ani_boolean hasPrivateWindow(ani_env* env, ani_double displayId); + static void GetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj, ani_long nativeObj); private: void onRegisterCallback(ani_env* env, ani_string type, ani_ref callback); void onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); void onGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj); + void OnGetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj); std::mutex mtx_; std::map>> jsCbMap_; }; diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h index 23845605e8..43949dc4f3 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h @@ -34,6 +34,9 @@ static void convertRect(DMRect rect, ani_object rectObj, ani_env* env); static void convertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, ani_object waterfallObj, ani_env *env); +static void convertDisplayPhysicalResolution(std::vector &displayPhysicalArray, + ani_object arrayObj, ani_env *env); + static ani_status cvtDisplay(sptr display, ani_env* env, ani_object obj); static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); @@ -46,6 +49,8 @@ static ani_object CreateAniUndefined(ani_env* env); static void CreateAniArrayInt(ani_env* env, ani_size size, ani_array_int *aniArray, std::vector vec); +static void CreateAniArrayDouble(ani_env* env, ani_size size, ani_array_double *aniArray, std::vector vec); + static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* result); static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp index e60d854ce2..0e0df5fc1f 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp @@ -147,7 +147,7 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DMS, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/display/BusinessError;", &aniClass); + ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; @@ -165,13 +165,11 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); - return ANI_OK; } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index ac51ee677e..147db378f6 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -31,7 +31,7 @@ namespace OHOS { namespace Rosen { // construct, set registerManager. -DisplayAni::DisplayAni(const std::shared_ptr& display) +DisplayAni::DisplayAni(const sptr& display) : display_(display) { } @@ -70,6 +70,233 @@ void DisplayAni::getCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutIn DisplayAniUtils::convertWaterArea(waterfallDisplayAreaRects, static_cast(waterfallObj), env); } +void DisplayAni::getAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + ani_double id; + env->Object_GetFieldByName_Double(obj, "id", &id); + auto display = SingletonContainer::Get().GetDisplayById(id); + if (display == nullptr) { + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, + "JsDisplay::GetAvailableArea failed, can not find display."); + return; + } + DMRect area; + DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(display->GetAvailableArea(area)); + if (ret != DmErrorCode::DM_OK) { + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, + "JsDisplay::GetAvailableArea failed."); + return; + } + DisplayAniUtils::convertRect(area, availableAreaObj, env); +} + +ani_boolean DisplayAni::HasImmersiveWindow(ani_env* env, ani_object obj) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + ani_double id; + env->Object_GetFieldByName_Double(obj, "id", &id); + auto display = SingletonContainer::Get().GetDisplayById(id); + if (display == nullptr) { + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, + "JsDisplay::HasImmersiveWindow failed, can not find display."); + return false; + } + bool immersive = false; + DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(display->HasImmersiveWindow(immersive)); + if (ret != DmErrorCode::DM_OK) { + AniErrUtils::ThrowBusinessError(env, ret, "JsDisplay::HasImmersiveWindow failed."); + return false; + } + return immersive; +} + +bool DisplayAni::IsCallbackRegistered(ani_env* env, ani_string& type, ani_ref callback) +{ + if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { + TLOGI(WmsLogTag::DMS, "method %{public}s not registered.", type.c_str()); + return false; + } + for (const auto& iter : jsCbMap_[type]) { + ani_boolean isEquals = false; + env->Reference_StrictEquals(callback, iter.first, $isEquals); + if (isEquals) { + TLOGE(WmsLogTag::DMS, "callback is already registered!"); + return true; + } + } + return false; + +} + +void DisplayAni::RegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + ani_long displayRef; + env->Object_GetFieldByName_Long(obj, "displayRef", &displayRef); + DisplayAni* displayAni = reinterpret_cast(displayRef); + if (displayAni != nullptr) { + displayAni->OnRegisterCallback(env, obj, type, callback); + } else { + TLOGE(WmsLogTag::DMS, "[ANI] displayAni not found"); + } +} + +void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref callback) +{ + std::string typeString; + DisplayAniUtils::GetStdString(env, type, typeString); + ani_boolean callbackUndefined = 0; + ani_boolean callbackIsNull = 0; + env->Reference_IsUndefined(callback, &callbackUndefined); + env->Reference_IsNull(callback, &callbackIsNull); + if (callbackUndefined || callbackIsNull) { + std::string errMsg = "[ANI] failed to register display listener with type, cbk null or undefined"; + TLOGE(WmsLogTag::DMS, "callbackNull or undefined"); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); + return; + } + if (IsCallbackRegistered(env, type, callback)) { + TLOGI(WmsLogTag::DMS, "Callback has already been registered!"); + return; + } + + sptr displayAniListener = new(std::nothrow) DisplayAniListener(env); + if (displayAniListener == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI]displayListener is nullptr"); + AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, "displayListener is nullptr"); + return; + } + DMError ret = DMError::DM_OK; + std::lock_guard lock(mtx_); + if (typeString == EVENT_AVAILABLE_AREA_CHANGED) { + auto displayId = display_->GetId(); + TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback availableAreaChange begin"); + ret = SingletonContainer::Get().RegisterAvailableAreaListener(displayAniListener, displayId); + } else { + ret = DMError::DM_ERROR_INVALID_PARAM; + } + DmErrorCode retCode = DM_JS_TO_ERROR_CODE_MAP.at(ret); + if (retCode != DmErrorCode::DM_OK) { + TLOGI(WmsLogTag::DMS, "Failed to register display listener with type"); + std::string errMsg = "Failed to register display listener with type"; + AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, errMsg); + return; + } + ani_ref cbRef{}; + env->GlobalReference_Create(callback, &cbRef); + displayAniListener->AddCallback(typeString, cbRef); + jsCbMap_[typeString][callback] = displayAniListener; +} + +void DisplayAni::UnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + ani_long displayRef; + env->Object_GetFieldByName_Long(obj, "displayRef", &displayRef); + DisplayAni* displayAni = reinterpret_cast(displayRef); + if (displayAni != nullptr) { + displayAni->OnUnRegisterCallback(env, obj, type, callback); + } else { + TLOGE(WmsLogTag::DMS, "[ANI] DisplayAni null"); + } +} + +void DisplayAni::OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref callback) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + std::string typeString; + DisplayAniUtils::GetStdString(env, type, typeString); + ani_boolean callbackNull = 0; + env->Reference_IsUndefined(callback, &callbackNull); + DmErrorCode ret; + if (callbackNull) { + TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback for all"); + ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); + } else { + TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback with type"); + ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterDisplayListenerWithType(typeString, env, callback)); + } + + if (ret != DmErrorCode::DM_OK) { + std::string errMsg = "[ANI] failed to unregister display listener with type"; + TLOGE(WmsLogTag::DMS, "[ANI] failed to unregister display listener with type"); + AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, errMsg); + } +} + +DMError DisplayAni::UnregisterAllDisplayListenerWithType(std::string type) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + std::lock_guard lock(mtx_); + if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { + TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType methodName %{public}s not registered!", + type.c_str()); + return DMError::DM_OK; + } + DMError ret = DMError::DM_OK; + for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { + it->second->RemoveAllCallback(); + if (type == EVENT_AVAILABLE_AREA_CHANGED) { + auto displayId = display_->GetId(); + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener, displayId); + } else { + ret = DMError::DM_ERROR_INVALID_PARAM; + } + jsCbMap_[type].erase(it++); + } + jsCbMap_.erase(type); + return ret; +} + +DMError DisplayAni::UnregisterDisplayListenerWithType(std::string type, ani_env* env, ani_ref callback) +{ + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + std::lock_guard lock(mtx_); + if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { + TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); + return DMError::DM_OK; + } + DMError ret = DMError::DM_OK; + for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { + bool isEquals = it->second->IsAniCallBackExist(env, type, callback); + if (isEquals) { + TLOGI(WmsLogTag::DMS, "[ANI] isEquals check begin"); + it->second->RemoveCallback(env, type, callback); + if (type == EVENT_AVAILABLE_AREA_CHANGED) { + TLOGI(WmsLogTag::DMS, "[ANI] start to unregis display event listener! event = %{public}s", + type.c_str()); + auto displayId = display_->GetId(); + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener, + displayId); + } else { + ret = DMError::DM_ERROR_INVALID_PARAM; + } + jsCbMap_[type].erase(it++); + TLOGI(WmsLogTag::DMS, "[ANI] unregister display listener with type: %{public}s ret: %{public}u", + type.c_str(), ret); + break; + } else { + it++; + } + } + if (jsCbMap_[type].empty()) { + jsCbMap_.erase(type); + } + return ret; +} + +void DisplayAni::CreateDisplayAni(sptr display, ani_object displayObj, ani_env* env) +{ + std::unique_ptr displayAni = std::make_unique(display); + if (ANI_OK != env->Object_SetFieldByName_Long(static_cast(displayObj), + "displayRef", reinterpret_cast(displayAni.release()))) { + TLOGE(WmsLogTag::DMS, "[ANI] set displayAni ref fail"); + } +} + extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { @@ -102,7 +329,12 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"syncOn", nullptr, reinterpret_cast(DisplayManagerAni::registerCallback)}, ani_native_function {"syncOff", nullptr, - reinterpret_cast(DisplayManagerAni::unRegisterCallback)} + reinterpret_cast(DisplayManagerAni::unRegisterCallback)}, + ani_native_function {"hasPrivateWindow", nullptr, + reinterpret_cast(DisplayManagerAni::hasPrivateWindow)}, + ani_native_function {"getAllDisplayPhysicalResolutionNative", nullptr, + reinterpret_cast(DisplayManagerAni::GetAllDisplayPhysicalResolution)}, + ani_native_function {"isCaptured", nullptr, reinterpret_cast(DisplayManagerAni::IsCaptured)}, }; if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); @@ -117,9 +349,17 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) std::array methods = { ani_native_function {"getCutoutInfoInternal", "L@ohos/display/display/CutoutInfo;:V", reinterpret_cast(DisplayAni::getCutoutInfo)}, + ani_native_function {"getAvailableAreaInternal", "L@ohos/display/display/Rect;:V", + reinterpret_cast(DisplayAni::getAvailableArea)}, + ani_native_function {"hasImmersiveWindowInternal", ":Z", + reinterpret_cast(DisplayAni::HasImmersiveWindow)}, + ani_native_function {"syncOn", nullptr, + reinterpret_cast(DisplayAni::RegisterCallback)}, + ani_native_function {"syncOff", nullptr, + reinterpret_cast(DisplayAni::UnRegisterCallback)}, }; if ((ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size())) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] bind fail %{public}u", ret); + TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); return ANI_NOT_FOUND; } *result = ANI_VERSION_1; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index f9c0410cc3..57b7227962 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -100,6 +100,8 @@ void DisplayAniListener::OnCreate(DisplayId id) return; } std::vector vec = it->second; + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + // find callbacks in vector for (ani_ref oneAniCallback : vec) { ani_boolean result; if (ANI_OK != env_->Reference_IsUndefined(oneAniCallback, &result)) { @@ -173,6 +175,39 @@ void DisplayAniListener::OnChange(DisplayId id) } void DisplayAniListener::OnPrivateWindow(bool hasPrivate) { + TLOGI(WmsLogTag::DMS, "[ANI] OnPrivateWindow is called, hasPrivate: %{public}u", + static_cast(hasPrivate)); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); + return; + } + std::lock_guard lock(aniCallBackMtx_); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not register!"); + return; + } + if (aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE) == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not this event, return"); + return; + } + if (env_ != nullptr) { + auto it = aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE); + for (auto oneAniCallback : it->second) { + auto task = [env = env_, oneAniCallback, hasPrivate] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", + nullptr, oneAniCallback, hasPrivate); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::PrivateWindowCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + } + } else { + TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow: env is nullptr"); + } } void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) { @@ -212,9 +247,75 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) } void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) { + TLOGI(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged is called"); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); + return; + } + std::lock_guard lock(aniCallBackMtx_); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not register!"); + return; + } + if (aniCallBack_.find(EVENT_FOLD_ANGLE_CHANGED) == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not this event, return"); + return; + } + if (env_ != nullptr) { + auto it = aniCallBack_.find(EVENT_FOLD_ANGLE_CHANGED); + ani_array_double cbArray; + DisplayAniUtils::CreateAniArrayDouble(env_, foldAngles.size(), &cbArray, foldAngles); + for (auto oneAniCallback : it->second) { + auto task = [env = env_, oneAniCallback, cbArray] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldAngleChangeCallback", + nullptr, oneAniCallback, cbArray); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldAngleChangeCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + } + } else { + TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged: env is nullptr"); + } } void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) { + TLOGI(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged is called"); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); + return; + } + std::lock_guard lock(aniCallBackMtx_); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not register!"); + return; + } + if (aniCallBack_.find(EVENT_CAPTURE_STATUS_CHANGED) == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not this event, return"); + return; + } + if (env_ != nullptr) { + auto it = aniCallBack_.find(EVENT_CAPTURE_STATUS_CHANGED); + for (auto oneAniCallback : it->second) { + auto task = [env = env_, oneAniCallback, isCapture] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", + nullptr, oneAniCallback, isCapture); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::CaptureStatusChangedCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + } + } else { + TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged: env is nullptr"); + } } void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) { @@ -254,6 +355,40 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) } void DisplayAniListener::OnAvailableAreaChanged(DMRect area) { + TLOGI(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged is called"); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr || env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); + return; + } + std::lock_guard lock(aniCallBackMtx_); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not register!"); + return; + } + if (aniCallBack_.find(EVENT_AVAILABLE_AREA_CHANGED) == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not this event, return"); + return; + } + if (env_ != nullptr) { + auto it = aniCallBack_.find(EVENT_AVAILABLE_AREA_CHANGED); + for (auto oneAniCallback : it->second) { + ani_object rectObj = nullptr; + DisplayAniUtils::convertRect(area, rectObj, env_); + auto task = [env = env_, oneAniCallback, rectObj] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "availableAreaChangedCallback", + nullptr, oneAniCallback, rectObj); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::AvailableAreaChangedCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + } + } else { + TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged: env is nullptr"); + } } ani_status DisplayAniListener::CallAniMethodVoid(ani_object object, const char* cls, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index d85c12d35f..16651c05c8 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -68,6 +68,13 @@ ani_boolean DisplayManagerAni::isFoldableAni(ani_env* env) return static_cast(foldable); } +ani_boolean DisplayManagerAni::IsCaptured(ani_env* env) +{ + bool isCapture = SingletonContainer::Get().IsCaptured(); + TLOGI(WmsLogTag::DMS, "[ANI]" PRIu64", isCapture = %{public}u", isCapture); + return static_cast(isCapture); +} + ani_int DisplayManagerAni::getFoldStatus(ani_env* env) { auto status = SingletonContainer::Get().GetFoldStatus(); @@ -111,13 +118,13 @@ void DisplayManagerAni::onGetCurrentFoldCreaseRegion(ani_env* env, ani_object ob TLOGE(WmsLogTag::DMS, "[ANI] get ani_array len fail"); } TLOGI(WmsLogTag::DMS, "[ANI] set CurrentFoldCreaseRegion property begin"); - for (size_t i = 0; i < std::min(int(length), static_cast(rects.size())); i++) { + for (int i = 0; i < std::min(int(length), static_cast(rects.size())); i++) { ani_ref currentCrease; if (ANI_OK != env->Object_CallMethodByName_Ref(static_cast(creaseRectsObj), "$_get", "I:Lstd/core/Object;", ¤tCrease, (ani_int)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } - TLOGI(WmsLogTag::DMS, "current i: %{public}u", i); + TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); DisplayAniUtils::convertRect(rects[i], static_cast(currentCrease), env); } } @@ -142,6 +149,7 @@ void DisplayManagerAni::getAllDisplaysAni(ani_env* env, ani_object arrayObj) } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); DisplayAniUtils::cvtDisplay(displays[i], env, static_cast(currentDisplay)); + DisplayAni::CreateDisplayAni(displays[i], static_cast(currentDisplay), env); } TLOGI(WmsLogTag::DMS, "[ANI] getAllDisplaysAni end"); } @@ -162,6 +170,7 @@ void DisplayManagerAni::getDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_ return; } DisplayAniUtils::cvtDisplay(display, env, obj); + DisplayAni::CreateDisplayAni(display, static_cast(obj), env); } void DisplayManagerAni::getDefaultDisplaySyncAni(ani_env* env, ani_object obj) @@ -173,6 +182,7 @@ void DisplayManagerAni::getDefaultDisplaySyncAni(ani_env* env, ani_object obj) } TLOGI(WmsLogTag::DMS, "[ANI] getDefaultDisplaySyncAni"); DisplayAniUtils::cvtDisplay(display, env, obj); + DisplayAni::CreateDisplayAni(display, static_cast(obj), env); return; } @@ -222,7 +232,7 @@ void DisplayManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_re if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register display listener with type, errcode: %{public}d", ret); std::string errMsg = "Failed to register display listener with type"; - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); + AniErrUtils::ThrowBusinessError(env, ret, errMsg); return; } // add listener to map @@ -243,6 +253,18 @@ DmErrorCode DisplayManagerAni::processRegisterCallback(ani_env* env, std::string } else if (typeStr == EVENT_DISPLAY_MODE_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterDisplayModeListener(displayAniListener)); + } else if (typeStr == EVENT_AVAILABLE_AREA_CHANGED) { + ret = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().RegisterAvailableAreaListener(displayAniListener)); + } else if (typeStr == EVENT_FOLD_ANGLE_CHANGED) { + ret = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().RegisterFoldAngleListener(displayAniListener)); + } else if (typeStr == EVENT_CAPTURE_STATUS_CHANGED) { + ret = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().RegisterCaptureStatusListener(displayAniListener)); + } else if (typeStr == EVENT_PRIVATE_MODE_CHANGE) { + ret = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().RegisterPrivateWindowListener(displayAniListener)); } return ret; } @@ -301,23 +323,34 @@ DMError DisplayManagerAni::UnRegisterDisplayListenerWithType(std::string type, a if (isEquals) { it->second->RemoveCallback(env, type, callback); if (type == EVENT_ADD || type == EVENT_REMOVE || type == EVENT_CHANGE) { - TLOGI(WmsLogTag::DMS, "[ANI] start to unregis display event listener! event = %{public}s", - type.c_str()); sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayListener(thisListener); } else if (type == EVENT_FOLD_STATUS_CHANGED) { - TLOGI(WmsLogTag::DMS, "[ANI] start to unregis FoldStatusListener event listener! event = %{public}s", - type.c_str()); sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterFoldStatusListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldStatusChange success"); } else if (type == EVENT_DISPLAY_MODE_CHANGED) { - TLOGI(WmsLogTag::DMS, "[ANI] start to unregis foldDisplayModeChange event listener! event = %{public}s", - type.c_str()); sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayModeListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldDisplayModeChange success"); + } else if (type == EVENT_AVAILABLE_AREA_CHANGED) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener availableAreaListener success"); + } else if (type == EVENT_FOLD_ANGLE_CHANGED) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterFoldAngleListener(thisListener); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldAngleListener success"); + } else if (type == EVENT_CAPTURE_STATUS_CHANGED) { + sptr thisListener(it->second); + SingletonContainer::Get().UnregisterCaptureStatusListener(thisListener); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener captureStatusListener success"); + } else if (type == EVENT_PRIVATE_MODE_CHANGE) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterPrivateWindowListener(thisListener); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener privateWindowListener success"); } + jsCbMap_[type].erase(it++); } } return ret; @@ -343,9 +376,63 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type } else if (type == EVENT_DISPLAY_MODE_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayModeListener(thisListener); + } else if (type == EVENT_AVAILABLE_AREA_CHANGED) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener); + } else if (type == EVENT_FOLD_ANGLE_CHANGED) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterFoldAngleListener(thisListener); + } else if (type == EVENT_CAPTURE_STATUS_CHANGED) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterCaptureStatusListener(thisListener); + } else if (type == EVENT_PRIVATE_MODE_CHANGE) { + sptr thisListener(it->second); + ret = SingletonContainer::Get().UnregisterPrivateWindowListener(thisListener); } + jsCbMap_[type].erase(it++); + TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType end"); } + jsCbMap_.erase(type); return ret; } + +ani_boolean DisplayManagerAni::hasPrivateWindow(ani_env* env, ani_double displayId) +{ + TLOGI(WmsLogTag::DMS, "[ANI] DMS hasPrivateWindow begin"); + bool hasPrivateWindow = false; + if (displayId < 0) { + std::string errMsg = "Invalid args count, need one arg"; + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); + return hasPrivateWindow; + } + DmErrorCode errCode = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().HasPrivateWindow(static_cast(displayId), hasPrivateWindow)); + if (errCode != DmErrorCode::DM_OK) { + std::string errMsg = "Failed to convert parameter to displayId"; + AniErrUtils::ThrowBusinessError(env, errCode, "Failed to convert parameter to displayId"); + return hasPrivateWindow; + } + return hasPrivateWindow; +} + +void DisplayManagerAni::GetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DMS, "[ANI] DMS GetAllDisplayPhysicalResolution begin"); + DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); + displayManagerAni->OnGetAllDisplayPhysicalResolution(env, arrayObj); +} + +void DisplayManagerAni::OnGetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj) +{ + TLOGI(WmsLogTag::DMS, "[ANI] DMS OnGetAllDisplayPhysicalResolution begin"); + std::vector displayPhysicalArray = + SingletonContainer::Get().GetAllDisplayPhysicalResolution(); + if (displayPhysicalArray.empty()) { + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_SYSTEM_INNORMAL, + "JsDisplayManager::OnGetAllDisplayPhysicalResolution failed."); + } else { + DisplayAniUtils::convertDisplayPhysicalResolution(displayPhysicalArray, arrayObj, env); + } +} } } \ No newline at end of file diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 88673b0505..c58ce11452 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -52,7 +52,6 @@ static const std::map NATIVE_TO_JS_DISPLAY_ void DisplayAniUtils::convertRect(DMRect rect, ani_object rectObj, ani_env* env) { - TLOGI(WmsLogTag::DMS, "[ANI] rect area start"); TLOGI(WmsLogTag::DMS, "[ANI] rect area info: %{public}d, %{public}d, %{public}u, %{public}u", rect.posX_, rect.posY_, rect.width_, rect.height_); env->Object_SetFieldByName_Double(rectObj, "left", rect.posX_); @@ -79,6 +78,24 @@ void DisplayAniUtils::convertWaterArea(WaterfallDisplayAreaRects waterfallDispla convertRect(waterfallDisplayAreaRects.bottom, static_cast(bottomObj), env); } +void DisplayAniUtils::convertDisplayPhysicalResolution(std::vector& displayPhysicalArray, + ani_object arrayObj, ani_env *env) +{ + ani_double arrayObjLen; + env->Object_GetPropertyByName_Double(arrayObj, "length", &arrayObjLen); + + for (uint32_t i = 0; i < displayPhysicalArray.size() && i < static_cast(arrayObjLen); i++) { + ani_ref obj; + env->Object_CallMethodByName_Ref(arrayObj, "$_get", "I:Lstd/core/Object;", &obj, (ani_int)i); + env->Object_SetFieldByName_Int(static_cast(obj), "foldDisplayMode_", + static_cast(displayPhysicalArray[i].foldDisplayMode_)); + env->Object_SetFieldByName_Double(static_cast(obj), "physicalWidth", + displayPhysicalArray[i].physicalWidth_); + env->Object_SetFieldByName_Double(static_cast(obj), "physicalHeight", + displayPhysicalArray[i].physicalHeight_); + } +} + ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_object obj) { sptr info = display->GetDisplayInfoWithCache(); @@ -94,9 +111,9 @@ ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Ref(obj, "name", str); env->Object_SetFieldByName_Boolean(obj, "alive", info->GetAliveStatus()); if (NATIVE_TO_JS_DISPLAY_STATE_MAP.count(info->GetDisplayState()) != 0) { - env->Object_SetFieldByName_Int(obj, "state", static_cast(info->GetDisplayState())); + env->Object_SetFieldByName_Int(obj, "state_", static_cast(info->GetDisplayState())); } else { - env->Object_SetFieldByName_Int(obj, "state", 0); + env->Object_SetFieldByName_Int(obj, "state_", 0); } env->Object_SetFieldByName_Double(obj, "refreshRate", info->GetRefreshRate()); env->Object_SetFieldByName_Double(obj, "rotation", static_cast(info->GetRotation())); @@ -109,7 +126,7 @@ ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Double(obj, "availableWidth", info->GetAvailableWidth()); env->Object_SetFieldByName_Double(obj, "availableHeight", info->GetAvailableHeight()); env->Object_SetFieldByName_Double(obj, "densityDPI", info->GetVirtualPixelRatio() * DOT_PER_INCH); - env->Object_SetFieldByName_Double(obj, "orientation", + env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetDisplayOrientation())); env->Object_SetFieldByName_Double(obj, "densityPixels", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "scaledDensity", info->GetVirtualPixelRatio()); @@ -117,7 +134,7 @@ ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Double(obj, "yDPI", info->GetYDpi()); auto colorSpaces = info->GetColorSpaces(); auto hdrFormats = info->GetHdrFormats(); - TLOGI(WmsLogTag::DMS, "[ANI] colorSpaces(0) %{public}u, %{public}u", colorSpaces.size(), colorSpaces[1]); + TLOGI(WmsLogTag::DMS, "[ANI] colorSpaces(0) %{public}d", (int)colorSpaces.size()); if (colorSpaces.size() != 0) { ani_array_int colorSpacesAni; CreateAniArrayInt(env, colorSpaces.size(), &colorSpacesAni, colorSpaces); @@ -148,6 +165,16 @@ void DisplayAniUtils::CreateAniArrayInt(ani_env* env, ani_size size, ani_array_i } } +void DisplayAniUtils::CreateAniArrayDouble(ani_env* env, ani_size size, + ani_array_double *aniArray, std::vector vec) +{ + env->Array_New_Double(size, aniArray); + std::vector vecDoubles; + std::copy(vec.begin(), vec.end(), std::back_inserter(vecDoubles)); + ani_double* aniArrayBuf = reinterpret_cast(vecDoubles.data()); + env->Array_SetRegion_Double(*aniArray, 0, size, aniArrayBuf); +} + ani_status DisplayAniUtils::GetStdString(ani_env *env, ani_string ani_str, std::string &result) { ani_size strSize; diff --git a/interfaces/kits/ani/screen_runtime/BUILD.gn b/interfaces/kits/ani/screen_runtime/BUILD.gn index fce48d6eaa..8904533880 100644 --- a/interfaces/kits/ani/screen_runtime/BUILD.gn +++ b/interfaces/kits/ani/screen_runtime/BUILD.gn @@ -47,6 +47,7 @@ ohos_shared_library("screenani_kit") { "screen_ani/src/screen_ani_listener.cpp", "screen_ani/src/screen_ani_manager.cpp", "screen_ani/src/screen_ani_utils.cpp", + "screen_ani/src/screen_ani.cpp" ] configs = [ diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index d895f7f93d..e9eab12b33 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -14,6 +14,7 @@ */ import { AsyncCallback, Callback } from '@ohos.base'; +import { BusinessError } from '@ohos.base'; export default namespace screen { @@ -31,6 +32,221 @@ export function off(eventType: 'connect' | 'disconnect' | 'change', callback?: C native function syncOff(eventType: 'connect' | 'disconnect' | 'change', nativeObj: long, callback?: Callback): void; +export function makeMirror(mainScreen: number, mirrorScreen: Array, callback: AsyncCallback): void { + taskpool.execute((): number => { + let res: number = makeMirrorInternal(mainScreen, mirrorScreen); + return res; + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as number); + }).catch((err: NullishType) => { + callback(err as BusinessError, -1); + }); +} + +export function makeMirror(mainScreen: number, mirrorScreen: Array): Promise { + return new Promise((resolve: (value: number) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): number => { + let res: number = makeMirrorInternal(mainScreen, mirrorScreen); + return res; + }).then((ret: NullishType) => { + resolve(ret as number); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }) +} + +export native function makeMirrorInternal(mainScreen: number, mirrorScreen: Array): number; + +export function getAllScreens(callback: AsyncCallback>): void { + taskpool.execute((): Array => { + let screens: Array = new Array(10); + for (let i = 0; i < 10; i++) { + screens[i] = new ScreenImpl(); + } + getAllScreensInternal(screens); + minusScreens(screens); + return screens; + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as Array); + }).catch((err: NullishType) => { + callback(err as BusinessError, new Array()); + }); +} + +export function getAllScreens(): Promise> { + return new Promise>((resolve: (value: Array) => void, + reject: (error: BusinessError) => void ) => { + taskpool.execute((): Array => { + let screens: Array = new Array(10); + for (let i = 0; i < 10; i++) { + screens[i] = new ScreenImpl(); + } + getAllScreensInternal(screens); + minusScreens(screens); + return screens; + }).then((ret: NullishType) => { + resolve(ret as Array); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + } + ); +} + +function minusScreens(screens: Array) { + let i = 0; + for (; i < screens.length; i++) { + let currentScreen: ScreenImpl = screens[i] as ScreenImpl; + if (currentScreen.id < 0) { + break; + } + minusScreenModeInfo(currentScreen.supportedModeInfo_); + let current: Screen = new ScreenImpl(screens[i] as ScreenImpl); + screens[i] = current; + } + screens.splice(i); +} + +function minusScreenModeInfo(screenModeInfo: Array) { + let i = 0; + for (; i < screenModeInfo.length; i++) { + let currentScreenMode: ScreenModeInfoImpl = screenModeInfo[i] as ScreenModeInfoImpl; + if (currentScreenMode.width <= 0) { + break; + } + } + screenModeInfo.splice(i); +} + +export native function getAllScreensInternal(screens: Array): void; + +export interface Screen { + + readonly id: number; + + readonly parent: number; + + readonly supportedModeInfo: Array; + + readonly activeModeIndex: number; + + readonly orientation: Orientation; + + readonly sourceMode: ScreenSourceMode; + + setDensityDpi(densityDpi: number, callback: AsyncCallback): void; + + setDensityDpi(densityDpi: number): Promise; +} + +class ScreenImpl implements Screen { + + static { loadLibrary("screenani_kit.z"); } + + constructor() { + this.id = -1; + this.supportedModeInfo = new Array(10); + for (let i = 0; i < this.supportedModeInfo.length;i++) { + this.supportedModeInfo[i] = new ScreenModeInfoImpl(); + } + } + + constructor(screen: ScreenImpl) { + this.id = screen.id; + this.parent = screen.parent; + this.activeModeIndex = screen.activeModeIndex; + this.orientation = screen.orientation_ as Orientation; + this.supportedModeInfo = screen.supportedModeInfo_; + this.sourceMode = screen.sourceMode_ as ScreenSourceMode; + this.screenNativeObj = screen.screenNativeObj; + } + + readonly id: number; + + readonly parent: number; + + readonly supportedModeInfo: Array; + supportedModeInfo_: Array; + + readonly activeModeIndex: number; + + readonly orientation: Orientation; + orientation_: int; + + readonly sourceMode: ScreenSourceMode; + sourceMode_: int; + sourceModeLen: int; + + screenNativeObj: long; + + setDensityDpi(densityDpi: number, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.setDensityDpiInternal(number); + }).then(() => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + setDensityDpi(densityDpi: number): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { + taskpool.execute((): void => { + this.setDensityDpiInternal(number); + }).then(() => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + native setDensityDpiInternal(densityDpi: number): void; +} + +export interface ScreenModeInfo { + id: number; + + width: number; + + height: number; + + refreshRate: number; +} + +class ScreenModeInfoImpl implements ScreenModeInfo{ + id: number; + + width: number; + + height: number; + + refreshRate: number; +} + +export enum ScreenSourceMode { + SCREEN_MAIN = 0, + + SCREEN_MIRROR = 1, + + SCREEN_EXTEND = 2, + + SCREEN_ALONE = 3 +} + +export enum Orientation { + UNSPECIFIED = 0, + + VERTICAL = 1, + + HORIZONTAL = 2, + + REVERSE_VERTICAL = 3, + + REVERSE_HORIZONTAL = 4 +} + export let screenMgrRef: long; export function setScreenMgrRef(nativeObj: long): void{ screenMgrRef = nativeObj; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h new file mode 100644 index 0000000000..81c9ce0606 --- /dev/null +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h @@ -0,0 +1,35 @@ +/* + * 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 OHOS_ANI_SCREEN_H +#define OHOS_ANI_SCREEN_H + +#include "ani.h" +#include "screen.h" + +namespace OHOS { +namespace Rosen { + +class ScreenAni { +public: + explicit ScreenAni(const sptr& screen); + static void SetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi); + void OnSetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi); + +private: + sptr screen_ = nullptr; +}; +} +} +#endif diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h index b1448b8a05..f462512cd8 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h @@ -36,6 +36,8 @@ public: static ani_status initScreenManagerAni(ani_namespace screenNameSpace, ani_env* env); DmErrorCode processRegisterCallback(ani_env* env, std::string& typeStr, sptr screenAniListener); + static ani_double makeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen); + static void getAllScreens(ani_env* env, ani_object screensAni); private: void onRegisterCallback(ani_env* env, ani_string type, ani_ref callback); void onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h index f5923bb245..ff85c1f4dd 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h @@ -17,6 +17,7 @@ #include #include "ani.h" +#include "screen.h" #include "singleton_container.h" namespace OHOS { @@ -32,6 +33,16 @@ static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...); + +static ani_status ConvertScreen(ani_env *env, sptr screen, ani_object screenAni); + +static void ConvertScreenMode(ani_env* env, sptr mode, ani_object obj); + +static ani_status ConvertScreens(ani_env *env, std::vector> screen, ani_object& screensAni); + +static ani_object NewNativeObject(ani_env* env, const std::string& objName); + +static ani_array_ref NewNativeArray(ani_env* env, const std::string& objName, uint32_t size); }; } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp index 6a1c64b45e..47ace25c35 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp @@ -136,13 +136,11 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); - return ANI_OK; } } // namespace OHOS::Rosen \ No newline at end of file diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp new file mode 100644 index 0000000000..6a82934348 --- /dev/null +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp @@ -0,0 +1,48 @@ +/* + * 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 "screen_ani.h" + +#include "dm_common.h" +#include "window_manager_hilog.h" +#include "ani_err_utils.h" + +namespace OHOS { +namespace Rosen { +ScreenAni::ScreenAni(const sptr& screen) : screen_(screen) +{ +} + +void ScreenAni::SetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi) +{ + ani_long screenNativeRef; + if (ANI_OK != env->Object_GetFieldByName_Long(obj, "screenNativeObj", &screenNativeRef)) { + TLOGE(WmsLogTag::DMS, "[ANI] screenAni native null ptr"); + return; + } + ScreenAni* screenAni = reinterpret_cast(screenNativeRef); + screenAni->OnSetDensityDpi(env, obj, densityDpi); +} + +void ScreenAni::OnSetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi) +{ + DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(screen_->SetDensityDpi(static_cast(densityDpi))); + if (ret != DmErrorCode::DM_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] OnSetDensityDpi fail"); + AniErrUtils::ThrowBusinessError(env, ret, "JsScreen::OnSetDensityDpi failed."); + } +} + +} +} \ No newline at end of file diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index d542ecfd5f..f308a0f3a4 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -69,9 +69,93 @@ void ScreenAniListener::RemoveCallback(ani_env* env, const std::string& type, an } void ScreenAniListener::OnConnect(ScreenId id) { + TLOGI(WmsLogTag::DMS, "[ANI] OnConnect begin"); + std::lock_guard lock(mtx_); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + return; + } + TLOGI(WmsLogTag::DMS, "[ANI] OnConnect is called, displayId: %{public}d", static_cast(id)); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not register!"); + return; + } + auto it = aniCallBack_.find(EVENT_CONNECT); + if (it == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not this event, return"); + return; + } + std::vector vec = it->second; + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + // find callbacks in vector + for (auto oneAniCallback : vec) { + if (env_ == nullptr) { + TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + return; + } + ani_boolean undefRes; + ani_boolean nullRes; + env_->Reference_IsUndefined(oneAniCallback, &undefRes); + env_->Reference_IsNull(oneAniCallback, &nullRes); + // judge is null or undefined + if (undefRes == 1) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); + return; + } + if (nullRes == 1) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); + return; + } + + ScreenAniUtils::CallAniFunctionVoid(env_, "L@ohos/screen/screen;", "screenEventCallBack", + "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + } } void ScreenAniListener::OnDisconnect(ScreenId id) { + TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect begin"); + std::lock_guard lock(mtx_); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + return; + } + TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect is called, displayId: %{public}d", static_cast(id)); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not register!"); + return; + } + auto it = aniCallBack_.find(EVENT_DISCONNECT); + if (it == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not this event, return"); + return; + } + std::vector vec = it->second; + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + // find callbacks in vector + for (auto oneAniCallback : vec) { + if (env_ == nullptr) { + TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + return; + } + ani_boolean undefRes; + ani_boolean nullRes; + env_->Reference_IsUndefined(oneAniCallback, &undefRes); + env_->Reference_IsNull(oneAniCallback, &nullRes); + // judge is null or undefined + if (undefRes == 1) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); + return; + } + if (nullRes == 1) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); + return; + } + + ScreenAniUtils::CallAniFunctionVoid(env_, "L@ohos/screen/screen;", "screenEventCallBack", + "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + } } // need to implement @@ -95,7 +179,7 @@ void ScreenAniListener::OnChange(ScreenId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}u", vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index aea2498c97..cdbfcf0b3e 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -12,6 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include "screen_ani_manager.h" + #include #include @@ -20,7 +22,7 @@ #include "window_manager_hilog.h" #include "dm_common.h" #include "refbase.h" -#include "screen_ani_manager.h" +#include "screen_ani.h" #include "screen_ani_utils.h" #include "screen_ani_listener.h" #include "ani_err_utils.h" @@ -34,7 +36,7 @@ ScreenManagerAni::ScreenManagerAni() void ScreenManagerAni::registerCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj) { - TLOGI(WmsLogTag::DMS, "[ANI] start to register screen callback: %{public}lld", nativeObj); + TLOGI(WmsLogTag::DMS, "[ANI] start to register screen callback: %{public}ld", (long)nativeObj); ScreenManagerAni* screenManagerAni = reinterpret_cast(nativeObj); if (screenManagerAni != nullptr) { screenManagerAni->onRegisterCallback(env, type, callback); @@ -87,21 +89,18 @@ void ScreenManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_ref if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register screen listener with type, errcode: %{public}d", ret); std::string errMsg = "Failed to register screen listener with type"; - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); + AniErrUtils::ThrowBusinessError(env, ret, errMsg); return; } // add listener to map jsCbMap_[typeString][callback] = screenAniListener; - if (typeString == EVENT_CHANGE) { - screenAniListener->OnChange(0); - } } DmErrorCode ScreenManagerAni::processRegisterCallback(ani_env* env, std::string& typeStr, sptr screenAniListener) { DmErrorCode ret = DmErrorCode::DM_ERROR_INVALID_PARAM; - if (typeStr == EVENT_CHANGE) { + if (typeStr == EVENT_CHANGE || typeStr == EVENT_CONNECT || typeStr == EVENT_DISCONNECT) { TLOGI(WmsLogTag::DMS, "processRegisterCallback %{public}s", typeStr.c_str()); ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterScreenListener(screenAniListener)); @@ -180,6 +179,30 @@ DMError ScreenManagerAni::UnRegisterAllScreenListenerWithType(std::string type) return ret; } +ani_double ScreenManagerAni::makeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen) +{ + ani_double length = 0; + std::vector screenIds; + env->Object_GetPropertyByName_Double(mirrorScreen, "length", &length); + TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); + for (uint32_t i = 0; i < length; i++) { + ani_double screenId; + if (ANI_OK != env->Object_CallMethodByName_Double(mirrorScreen, "$_get", "I:D", + &screenId, (ani_int)i)) { + TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); + return AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to get screenId"); + } + screenIds.emplace_back(static_cast(screenId)); + } + ScreenId screenGroupId = INVALID_SCREEN_ID; + DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().MakeMirror(static_cast(mainScreen), + screenIds, screenGroupId)); + if (ret != DmErrorCode::DM_OK) { + AniErrUtils::ThrowBusinessError(env, ret, "JsScreenManager::OnMakeMirror failed."); + } + return static_cast(screenGroupId); +} ani_status ScreenManagerAni::initScreenManagerAni(ani_namespace screenNameSpace, ani_env* env) { @@ -199,6 +222,28 @@ ani_status ScreenManagerAni::initScreenManagerAni(ani_namespace screenNameSpace, return ret; } +void ScreenManagerAni::getAllScreens(ani_env* env, ani_object screensAni) +{ + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "JsScreenManager::OnGetAllScreens"); + TLOGI(WmsLogTag::DMS, "[ANI] getAllScreens start"); + std::vector> screens; + auto res = DM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get().GetAllScreens(screens)); + if (res != DmErrorCode::DM_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] JsScreenManager::OnGetAllScreens failed."); + AniErrUtils::ThrowBusinessError(env, res, "JsScreenManager::OnGetAllScreens failed."); + } else if (!screens.empty()) { + TLOGI(WmsLogTag::DMS, "[ANI] JsScreenManager::OnGetAllScreens succeed. size = %{public}u", + static_cast(screens.size())); + if (ANI_OK != ScreenAniUtils::ConvertScreens(env, screens, screensAni)) { + TLOGE(WmsLogTag::DMS, "[ANI] ConvertScreens fail"); + } + } else { + TLOGE(WmsLogTag::DMS, "[ANI] JsScreenManager::OnGetAllScreens null."); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, + "JsScreenManager::OnGetAllScreens failed."); + } +} + extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { @@ -220,12 +265,29 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"syncOn", nullptr, reinterpret_cast(ScreenManagerAni::registerCallback)}, ani_native_function {"syncOff", nullptr, - reinterpret_cast(ScreenManagerAni::unRegisterCallback)} + reinterpret_cast(ScreenManagerAni::unRegisterCallback)}, + ani_native_function {"makeMirrorInternal", nullptr, + reinterpret_cast(ScreenManagerAni::makeMirror)}, + ani_native_function {"getAllScreensInternal", nullptr, + reinterpret_cast(ScreenManagerAni::getAllScreens)} }; if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); return ANI_NOT_FOUND; } + ani_class screenCls = nullptr; + if ((ret = env->FindClass("L@ohos/screen/screen/ScreenImpl;", &screenCls)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); + return ANI_NOT_FOUND; + } + std::array methods = { + ani_native_function {"setDensityDpiInternal", "D:V", + reinterpret_cast(ScreenAni::SetDensityDpi)}, + }; + if ((ret = env->Class_BindNativeMethods(screenCls, methods.data(), methods.size())) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] bind screen class fail %{public}u", ret); + return ANI_NOT_FOUND; + } *result = ANI_VERSION_1; return ANI_OK; } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index 99ff06c027..4279e39d37 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -23,6 +23,8 @@ #include "window_manager_hilog.h" #include "dm_common.h" #include "refbase.h" +#include "screen_info.h" +#include "screen_ani.h" namespace OHOS { namespace Rosen { @@ -57,6 +59,102 @@ ani_status ScreenAniUtils::GetAniString(ani_env* env, const std::string& str, an return env->String_NewUTF8(str.c_str(), static_cast(str.size()), result); } +ani_status ScreenAniUtils::ConvertScreen(ani_env *env, sptr screen, ani_object obj) +{ + sptr info = screen->GetScreenInfo(); + TLOGI(WmsLogTag::DMS, "[ANI] convert screen id %{public}u", static_cast(info->GetScreenId())); + env->Object_SetFieldByName_Double(obj, "id", static_cast(info->GetScreenId())); + env->Object_SetFieldByName_Double(obj, "parent", static_cast(info->GetParentId())); + env->Object_SetFieldByName_Double(obj, "activeModeIndex", + static_cast(info->GetModeId())); + env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetOrientation())); + env->Object_SetFieldByName_Int(obj, "sourceMode_", static_cast(info->GetSourceMode())); + std::unique_ptr screenAni = std::make_unique(screen); + if (ANI_OK != env->Object_SetFieldByName_Long(obj, "screenNativeObj", + reinterpret_cast(screenAni.release()))) { + TLOGE(WmsLogTag::DMS, "[ANI] set screenNativeObj fail"); + return ANI_ERROR; + } + std::vector> modes = info->GetModes(); + ani_array_ref screenModeInfos = NewNativeArray(env, "L@ohos/screen/screen/ScreenModeInfoImpl;", + static_cast(modes.size())); + ani_size index = 0; + for (auto mode : modes) { + ani_object screenModeInfo = NewNativeObject(env, "L@ohos/screen/screen/ScreenModeInfoImpl;"); + ConvertScreenMode(env, mode, screenModeInfo); + if (ANI_OK != env->Array_Set_Ref(screenModeInfos, index, screenModeInfo)) { + TLOGE(WmsLogTag::DMS, "[ANI] Array_Set_Ref fail"); + return ANI_ERROR; + } + index++; + } + if (ANI_OK != env->Object_SetFieldByName_Ref(obj, "supportedModeInfo_", screenModeInfos)) { + TLOGE(WmsLogTag::DMS, "[ANI] get ScreenModeInfos fail"); + return ANI_ERROR; + } + return ANI_OK; +} + +ani_array_ref ScreenAniUtils::NewNativeArray(ani_env* env, const std::string& objName, uint32_t size) +{ + ani_array_ref array = nullptr; + ani_class cls; + if (env->FindClass(objName.c_str(), &cls) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return array; + } + if (env->Array_New_Ref(cls, size, CreateAniUndefined(env), &array) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create array failed"); + } + return array; +} + +ani_object ScreenAniUtils::NewNativeObject(ani_env* env, const std::string& objName) +{ + ani_class cls; + if (env->FindClass(objName.c_str(), &cls) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + return CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found"); + return CreateAniUndefined(env); + } + ani_object obj; + if (env->Object_New(cls, ctor, &obj) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new obj"); + return CreateAniUndefined(env); + } + return obj; +} + +void ScreenAniUtils::ConvertScreenMode(ani_env* env, sptr mode, ani_object obj) +{ + env->Object_SetFieldByName_Double(obj, "id", static_cast(mode->id_)); + env->Object_SetFieldByName_Double(obj, "width", static_cast(mode->width_)); + env->Object_SetFieldByName_Double(obj, "height", static_cast(mode->height_)); + env->Object_SetFieldByName_Double(obj, "refreshRate", static_cast(mode->refreshRate_)); +} + +ani_status ScreenAniUtils::ConvertScreens(ani_env *env, std::vector> screens, ani_object& screensAni) +{ + TLOGI(WmsLogTag::DMS, "[ANI] screens size %{public}u", static_cast(screens.size())); + for (uint32_t i = 0; i < screens.size(); i++) { + ani_ref currentScreenAni; + if (ANI_OK != env->Object_CallMethodByName_Ref(screensAni, "$_get", "I:Lstd/core/Object;", + ¤tScreenAni, (ani_int)i)) { + TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); + return ANI_ERROR; + } + if (ANI_OK != ConvertScreen(env, screens[i], static_cast(currentScreenAni))) { + TLOGE(WmsLogTag::DMS, "[ANI] get convert screenAni index %{public}u fail", (ani_int)i); + return ANI_ERROR; + } + } + return ANI_OK; +} + ani_status ScreenAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { diff --git a/interfaces/kits/ani/screenshot_runtime/BUILD.gn b/interfaces/kits/ani/screenshot_runtime/BUILD.gn new file mode 100644 index 0000000000..2b356dc46f --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/BUILD.gn @@ -0,0 +1,89 @@ +# Copyright (c) 2025-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("//build/ohos.gni") +import("../../../../windowmanager_aafwk.gni") + +config("screenshot_common_config") { + visibility = [ ":*" ] + + include_dirs = [ + "../common", + "../../../../utils/include", + "../../../innerkits/wm", + "../../../innerkits/dm", + "../../../../wm/include", + ] +} + +config("screenshot_kit_public_config") { + visibility = [ ":*" ] + + include_dirs = [ "screenshot_ani/include" ] +} + +# lib generate +ohos_shared_library("screenshotani_kit") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + sources = [ + "screenshot_ani/src/ani_err_utils.cpp", + "screenshot_ani/src/screenshot_ani_manager.cpp", + "screenshot_ani/src/screenshot_ani_utils.cpp", + ] + + configs = [ + ":screenshot_common_config", + ":screenshot_kit_public_config", + "../../../../resources/config/build:coverage_flags", + ] + + public_configs = [ ":screenshot_kit_public_config" ] + + deps = [ + "../../../../dm:libdm", + "../../../../utils:libwmutil", + "../../../../utils:libwmutil_base", + ] + + external_deps = [ + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "c_utils:utils", + "eventhandler:libeventhandler", + "graphic_2d:librender_service_base", + "graphic_surface:surface", # use for SurfaceUtils + "hilog:libhilog", + "hitrace:hitrace_meter", + "image_framework:image", + "image_framework:image_ani", + "image_framework:image_native", + "runtime_core:ani", + ] + + innerapi_tags = [ "platformsdk" ] + part_name = "window_manager" + subsystem_name = "window" +} + +group("screenshot_ani") { + deps = [ + ":screenshotani_kit", + "screenshot_ani:screenshot_etc", + ] +} \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/BUILD.gn b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/BUILD.gn new file mode 100644 index 0000000000..46050bdff6 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/BUILD.gn @@ -0,0 +1,30 @@ +# Copyright (c) 2025-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("//build/config/components/ets_frontend/ets2abc_config.gni") + +# abc generate +generate_static_abc("screenshot_abc") { + base_url = "./ets" + files = [ "./ets/@ohos.screenshot.ets" ] + is_boot_abc = "True" + device_dst_file = "/system/framework/screenshot_abc.abc" +} + +ohos_prebuilt_etc("screenshot_etc") { + source = "$target_out_dir/screenshot_abc.abc" + deps = [ ":screenshot_abc" ] + part_name = "window_manager" + subsystem_name = "window" + module_install_dir = "framework" +} \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/arktsconfig.json b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/arktsconfig.json new file mode 100644 index 0000000000..66342e4745 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/arktsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "baseUrl": "./ets", + "paths": { + "std": [ + "../../../../../../../../../arkcompiler/runtime_core/static_core/plugins/ets/stdlib/std" + ], + "escompat": [ + "../../../../../../../../../arkcompiler/runtime_core/static_core/plugins/ets/stdlib/escompat" + ], + "@koalaui/common": [ + "../../../../../../../../../third_party/musl/temp_idlize/node_modules/@koalaui/common/src" + ], + "@koalaui/compat": [ + "../../../../../../../../../third_party/musl/temp_idlize/node_modules/@koalaui/compat/src/arkts" + ], + "@koalaui/interop": [ + "../../../../../../../../../third_party/musl/temp_idlize/node_modules/@koalaui/interop/src/arkts" + ], + "@koalaui/runtime": [ + "../../../../../../../../../third_party/musl/temp_idlize/node_modules/@koalaui/runtime/src" + ], + "@ohos.screenshot": [ + "./screenshot.ets" + ], + "@ohos.base": [ + "../../../../../../../../../interface/sdk-js/api/@ohos.base.d.ets" + ] + }, + "outDir": "../cache", + "package": "@ohos" + }, + "files": [ + "./ets/screenshot.ets" + ] + } \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets new file mode 100644 index 0000000000..e934fd7b89 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021-2022 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 { AsyncCallback, Callback } from '@ohos.base'; +import { BusinessError } from '@ohos.base'; +import image from '@ohos.multimedia.image'; + +export default namespace screenshot { + +loadLibrary('screenshotani_kit.z'); + +export function save(options: ScreenshotOptions, callback: AsyncCallback): void { + taskpool.execute((options: ScreenshotOptions): image.PixelMap => { + let res: image.PixelMap = saveSync(options); + return res; + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as image.PixelMap); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); +} + +export function save(callback: AsyncCallback): void { + taskpool.execute((): image.PixelMap => { + let res: image.PixelMap = saveSync(); + return res; + }).then((ret: NullishType) => { + callback(new BusinessError(), ret as image.PixelMap); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); +} + +export function save(options?: ScreenshotOptions): Promise { + return new Promise((resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): image.PixelMap => { + let res: image.PixelMap = saveSync(); + return res; + }).then((ret: NullishType) => { + resolve(ret as image.PixelMap); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +native function saveSync(screenshotOptions?: ScreenshotOptions): image.PixelMap; + +export interface ScreenshotOptions { + screenRect: Rect; + + imageSize: Size; + + rotation: number; + + displayId: number; + + isNotificationNeeded: number; + + isCaptureFullOfScreen: number; +} + +export class ScreenshotOptionsImpl implements ScreenshotOptions{ + screenRect: Rect; + + imageSize: Size; + + rotation: number; + + displayId: number; + + isNotificationNeeded: number; + + isCaptureFullOfScreen: number; +} + +export interface Size { + width: number; + + height: number; +} + +export class SizeImpl implements Size { + width: number; + + height: number; +} + +export interface Rect { + left: number; + + top: number; + + width: number; + + height: number; +} + +export class RectImpl implements Rect { + left: number; + + top: number; + + width: number; + + height: number; +} + +} \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/ani_err_utils.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/ani_err_utils.h new file mode 100644 index 0000000000..b026ac0eaf --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/ani_err_utils.h @@ -0,0 +1,38 @@ +/* + * 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 SCREENSHOT_ANI_ERROR_UTILS_H +#define SCREENSHOT_ANI_ERROR_UTILS_H + +#include "ani.h" +#include "dm_common.h" +#include "wm_common.h" + +namespace OHOS::Rosen { +class AniErrUtils { +public: + static ani_object CreateAniError(ani_env* env, const DMError& errorCode, std::string msg = ""); + static ani_object CreateAniError(ani_env* env, const DmErrorCode& errorCode, std::string msg = ""); + static ani_status ThrowBusinessError(ani_env* env, DMError error, std::string message); + static ani_status ThrowBusinessError(ani_env* env, DmErrorCode error, std::string message); + static ani_status CreateBusinessError(ani_env* env, int32_t error, std::string message, ani_object* err); + +private: + static std::string GetErrorMsg(const DMError& errorCode); + static std::string GetErrorMsg(const DmErrorCode& errorCode); +}; +} // namespace OHOS::Rosen + +#endif //WINDOW_WINDOW_MANAGER_ANI_ERROR_UTILS_H \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h new file mode 100644 index 0000000000..4bad459c6a --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021-2022 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 SCREENSHOT_MANAGER_ANI_H +#define SCREENSHOT_MANAGER_ANI_H + +#include +#include "dm_common.h" +#include "refbase.h" +#include "pixel_map.h" +#include "pixel_map_ani.h" + +#include "ani.h" + +namespace OHOS::Rosen { + +struct Option { + Media::Rect rect; + Media::Size size; + int rotation = 0; + DisplayId displayId = 0; + bool isNeedNotify = true; + bool isNeedPointer = true; +}; + +struct Param { + DmErrorCode wret; + Option option; + std::string errMessage; + bool useInputOption; + bool validInputParam; + std::shared_ptr image; + Media::Rect imageRect; + bool isPick; +}; + +class ScreenshotManagerAni { +public: + explicit ScreenshotManagerAni(); + static ani_object Save(ani_env* env, ani_object options); + static void InitScreenshotManagerAni(ani_namespace nsp, ani_env* env); + static void GetScreenshot(ani_env *env, std::unique_ptr ¶m); +}; +} +#endif \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h new file mode 100644 index 0000000000..8fc440623c --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h @@ -0,0 +1,46 @@ +/* + * 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 OHOS_ANI_SCREEN_UTILS_H +#define OHOS_ANI_SCREEN_UTILS_H +#include + +#include "ani.h" +#include "pixel_map.h" +#include "singleton_container.h" +#include "screenshot_ani_manager.h" + +namespace OHOS::Rosen { + +class ScreenshotAniUtils { +public: +static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); + +static ani_object CreateAniUndefined(ani_env* env); + +static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* result); + +static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, + const char* fn, const char* signature, ...); + +static void ConvertScreenshot(ani_env *env, std::shared_ptr image, ani_object obj); + +static void GetScreenshotParam(ani_env *env, std::unique_ptr ¶m, ani_object options); + +static void GetScreenshotSize(ani_env *env, std::unique_ptr ¶m, ani_object options); + +static void GetScreenshotRect(ani_env *env, std::unique_ptr ¶m, ani_object options); +}; +} +#endif \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp new file mode 100644 index 0000000000..f16352c868 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp @@ -0,0 +1,146 @@ +/* + * 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_err_utils.h" +#include "screenshot_ani_utils.h" +#include "window_manager_hilog.h" + +#include + +namespace OHOS::Rosen { +constexpr const char* DM_ERROR_MSG_OK = "ok"; +constexpr const char* DM_ERROR_MSG_INIT_DMS_PROXY_LOCKED = "init dms proxy locked"; +constexpr const char* DM_ERROR_MSG_IPC_FAILED = "ipc failed"; +constexpr const char* DM_ERROR_MSG_REMOTE_CREATE_FAILED = "remote create failed"; +constexpr const char* DM_ERROR_MSG_NULLPTR = "nullptr"; +constexpr const char* DM_ERROR_MSG_INVALID_PARAM = "invalid param"; +constexpr const char* DM_ERROR_MSG_WRITE_INTERFACE_TOKEN_FAILED = "write interface token failed"; +constexpr const char* DM_ERROR_MSG_DEATH_RECIPIENT = "death recipient"; +constexpr const char* DM_ERROR_MSG_INVALID_MODE_ID = "invalid mode id"; +constexpr const char* DM_ERROR_MSG_WRITE_DATA_FAILED = "write data failed"; +constexpr const char* DM_ERROR_MSG_RENDER_SERVICE_FAILED = "render service failed"; +constexpr const char* DM_ERROR_MSG_UNREGISTER_AGENT_FAILED = "unregister agent failed"; +constexpr const char* DM_ERROR_MSG_INVALID_CALLING = "invalid calling"; +constexpr const char* DM_ERROR_MSG_INVALID_PERMISSION = "invalid permission"; +constexpr const char* DM_ERROR_MSG_NOT_SYSTEM_APP = "not system app"; +constexpr const char* DM_ERROR_MSG_DEVICE_NOT_SUPPORT = "device not support"; +constexpr const char* DM_ERROR_MSG_UNKNOWN = "unknown"; + +static std::map DM_ERROR_TO_ERROR_MSG_MAP { + {DMError::DM_OK, DM_ERROR_MSG_OK }, + {DMError::DM_ERROR_INIT_DMS_PROXY_LOCKED, DM_ERROR_MSG_INIT_DMS_PROXY_LOCKED }, + {DMError::DM_ERROR_IPC_FAILED, DM_ERROR_MSG_IPC_FAILED }, + {DMError::DM_ERROR_REMOTE_CREATE_FAILED, DM_ERROR_MSG_REMOTE_CREATE_FAILED }, + {DMError::DM_ERROR_NULLPTR, DM_ERROR_MSG_NULLPTR }, + {DMError::DM_ERROR_INVALID_PARAM, DM_ERROR_MSG_INVALID_PARAM }, + {DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED, DM_ERROR_MSG_WRITE_INTERFACE_TOKEN_FAILED }, + {DMError::DM_ERROR_DEATH_RECIPIENT, DM_ERROR_MSG_DEATH_RECIPIENT }, + {DMError::DM_ERROR_INVALID_MODE_ID, DM_ERROR_MSG_INVALID_MODE_ID }, + {DMError::DM_ERROR_WRITE_DATA_FAILED, DM_ERROR_MSG_WRITE_DATA_FAILED }, + {DMError::DM_ERROR_RENDER_SERVICE_FAILED, DM_ERROR_MSG_RENDER_SERVICE_FAILED }, + {DMError::DM_ERROR_UNREGISTER_AGENT_FAILED, DM_ERROR_MSG_UNREGISTER_AGENT_FAILED }, + {DMError::DM_ERROR_INVALID_CALLING, DM_ERROR_MSG_INVALID_CALLING }, + {DMError::DM_ERROR_INVALID_PERMISSION, DM_ERROR_MSG_INVALID_PERMISSION }, + {DMError::DM_ERROR_NOT_SYSTEM_APP, DM_ERROR_MSG_NOT_SYSTEM_APP }, + {DMError::DM_ERROR_DEVICE_NOT_SUPPORT, DM_ERROR_MSG_DEVICE_NOT_SUPPORT }, + {DMError::DM_ERROR_UNKNOWN, DM_ERROR_MSG_UNKNOWN }, +}; + +constexpr const char* DM_ERROR_CODE_MSG_OK = "ok"; +constexpr const char* DM_ERROR_CODE_MSG_NO_PERMISSION = "no permission"; +constexpr const char* DM_ERROR_CODE_MSG_NOT_SYSTEM_APP = "not system app"; +constexpr const char* DM_ERROR_CODE_MSG_INVALID_PARAM = "invalid param"; +constexpr const char* DM_ERROR_CODE_MSG_DEVICE_NOT_SUPPORT = "device not support"; +constexpr const char* DM_ERROR_CODE_MSG_INVALID_SCREEN = "invalid screen"; +constexpr const char* DM_ERROR_CODE_MSG_INVALID_CALLING = "invalid calling"; +constexpr const char* DM_ERROR_CODE_MSG_SYSTEM_INNORMAL = "system innormal"; + +static std::map DM_ERROR_CODE_TO_ERROR_MSG_MAP { + {DmErrorCode::DM_OK, DM_ERROR_CODE_MSG_OK }, + {DmErrorCode::DM_ERROR_NO_PERMISSION, DM_ERROR_CODE_MSG_NO_PERMISSION }, + {DmErrorCode::DM_ERROR_NOT_SYSTEM_APP, DM_ERROR_CODE_MSG_NOT_SYSTEM_APP }, + {DmErrorCode::DM_ERROR_INVALID_PARAM, DM_ERROR_CODE_MSG_INVALID_PARAM }, + {DmErrorCode::DM_ERROR_DEVICE_NOT_SUPPORT, DM_ERROR_CODE_MSG_DEVICE_NOT_SUPPORT }, + {DmErrorCode::DM_ERROR_INVALID_SCREEN, DM_ERROR_CODE_MSG_INVALID_SCREEN }, + {DmErrorCode::DM_ERROR_INVALID_CALLING, DM_ERROR_CODE_MSG_INVALID_CALLING }, + {DmErrorCode::DM_ERROR_SYSTEM_INNORMAL, DM_ERROR_CODE_MSG_SYSTEM_INNORMAL }, +}; + +std::string AniErrUtils::GetErrorMsg(const DMError& errorCode) +{ + return DM_ERROR_TO_ERROR_MSG_MAP.find(errorCode) != DM_ERROR_TO_ERROR_MSG_MAP.end() ? + DM_ERROR_TO_ERROR_MSG_MAP.at(errorCode) : ""; +} + +std::string AniErrUtils::GetErrorMsg(const DmErrorCode& errorCode) +{ + return DM_ERROR_CODE_TO_ERROR_MSG_MAP.find(errorCode) != DM_ERROR_CODE_TO_ERROR_MSG_MAP.end() ? + DM_ERROR_CODE_TO_ERROR_MSG_MAP.at(errorCode) : ""; +} + +ani_status AniErrUtils::ThrowBusinessError(ani_env* env, DMError error, std::string message) +{ + ani_object aniError; + CreateBusinessError(env, static_cast(error), message == "" ? GetErrorMsg(error) : message, &aniError); + ani_status status = env->ThrowError(static_cast(aniError)); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to throw err, status:%{public}d", static_cast(status)); + return status; + } + return ANI_OK; +} + +ani_status AniErrUtils::ThrowBusinessError(ani_env* env, DmErrorCode error, std::string message) +{ + ani_object aniError; + CreateBusinessError(env, static_cast(error), message == "" ? GetErrorMsg(error) : message, &aniError); + ani_status status = env->ThrowError(static_cast(aniError)); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to throw err, status:%{public}d", static_cast(status)); + return status; + } + return ANI_OK; +} + +ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::string message, ani_object* err) +{ + TLOGI(WmsLogTag::DMS, "[ANI] in"); + ani_class aniClass; + ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); + return status; + } + ani_method aniCtor; + status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] ctor not found, status:%{public}d", static_cast(status)); + return status; + } + ani_string aniMsg; + ScreenshotAniUtils::GetAniString(env, message, &aniMsg); + status = env->Object_New(aniClass, aniCtor, err, aniMsg, ScreenshotAniUtils::CreateAniUndefined(env)); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); + return status; + } + status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); + return status; + } + return ANI_OK; +} +} // namespace OHOS::Rosen \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp new file mode 100644 index 0000000000..b3d7b026e3 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp @@ -0,0 +1,150 @@ +/* + * 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 "screenshot_ani_manager.h" + +#include +#include + +#include "ani.h" +#include "singleton_container.h" +#include "window_manager_hilog.h" +#include "display_manager.h" +#include "dm_common.h" +#include "pixel_map_ani.h" +#include "refbase.h" +#include "screenshot_ani_utils.h" +#include "ani_err_utils.h" + +namespace OHOS::Rosen { + +ScreenshotManagerAni::ScreenshotManagerAni() +{ +} + +void ScreenshotManagerAni::InitScreenshotManagerAni(ani_namespace nsp, ani_env* env) +{ +} + +ani_object ScreenshotManagerAni::Save(ani_env* env, ani_object options) +{ + auto param = std::make_unique(); + if (param == nullptr) { + TLOGI(WmsLogTag::DMS, "Create param failed."); + return nullptr; + } + param->option.displayId = DisplayManager::GetInstance().GetDefaultDisplayId(); + ani_boolean optionsUndefined = 0; + env->Reference_IsUndefined(options, &optionsUndefined); + param->validInputParam = true; + if (!optionsUndefined) { + param->useInputOption = true; + ScreenshotAniUtils::GetScreenshotParam(env, param, options); + } + GetScreenshot(env, param); + std::shared_ptr pixelMap = param->image; + if (pixelMap == nullptr) { + TLOGI(WmsLogTag::DMS, "snapshot save pixelMap null"); + AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); + return ScreenshotAniUtils::CreateAniUndefined(env); + } + TLOGI(WmsLogTag::DMS, "snapshot save pixelMap, currentId = %{public}d", static_cast(pixelMap->currentId)); + auto nativePixelMap = Media::PixelMapAni::CreatePixelMap(env, pixelMap); + if (nativePixelMap == nullptr) { + TLOGI(WmsLogTag::DMS, "snapshot save nativePixelMap null"); + AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); + return ScreenshotAniUtils::CreateAniUndefined(env); + } + ani_double wid; + if (ANI_OK != env->Object_GetPropertyByName_Double(options, "isNeedNotify", &wid)) { + TLOGE(WmsLogTag::DMS, "[ANI] get isNeedNotify fail"); + } + TLOGI(WmsLogTag::DMS, "snapshot save function exe success"); + return nativePixelMap; +} + + +void ScreenshotManagerAni::GetScreenshot(ani_env *env, std::unique_ptr ¶m) +{ + if (!param->validInputParam) { + TLOGI(WmsLogTag::DMS, "Get Screenshot invalidInputParam"); + param->image = nullptr; + param->wret = DmErrorCode::DM_ERROR_INVALID_PARAM; + param->errMessage = "Get Screenshot Failed: Invalid input param"; + return; + } + CaptureOption option = { param->option.displayId, param->option.isNeedNotify, param->option.isNeedPointer}; + if (!param->isPick && (!option.isNeedNotify_ || !option.isNeedPointer_)) { + if (param->useInputOption) { + param->image = DisplayManager::GetInstance().GetScreenshotWithOption(option, + param->option.rect, param->option.size, param->option.rotation, ¶m->wret); + } else { + param->image = DisplayManager::GetInstance().GetScreenshotWithOption(option, ¶m->wret); + } + } else { + if (param->useInputOption) { + TLOGI(WmsLogTag::DMS, "Get Screenshot by input option"); + SnapShotConfig snapConfig; + snapConfig.displayId_ = param->option.displayId; + snapConfig.imageRect_ = param->option.rect; + snapConfig.imageSize_ = param->option.size; + snapConfig.rotation_ = param->option.rotation; + param->image = DisplayManager::GetInstance().GetScreenshotwithConfig(snapConfig, ¶m->wret, true); + } else if (param->isPick) { + TLOGI(WmsLogTag::DMS, "Get Screenshot by picker"); + param->image = DisplayManager::GetInstance().GetSnapshotByPicker(param->imageRect, ¶m->wret); + } else { + TLOGI(WmsLogTag::DMS, "Get Screenshot by default option"); + param->image = DisplayManager::GetInstance().GetScreenshot(param->option.displayId, ¶m->wret, true); + } + } + if (param->image == nullptr && param->wret == DmErrorCode::DM_OK) { + TLOGI(WmsLogTag::DMS, "Get Screenshot failed!"); + param->wret = DmErrorCode::DM_ERROR_INVALID_SCREEN; + param->errMessage = "Get Screenshot failed: Screenshot image is nullptr"; + return; + } +} + +extern "C" { +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::DMS, "[ANI] start to ANI_Constructor"); + ani_status ret; + ani_env *env; + if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env"); + return ANI_NOT_FOUND; + } + ani_namespace nsp; + if ((ret = env->FindNamespace("L@ohos/screenshot/screenshot;", &nsp)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); + return ANI_NOT_FOUND; + } + ScreenshotManagerAni::InitScreenshotManagerAni(nsp, env); + std::array funcs = { + ani_native_function {"saveSync", nullptr, + reinterpret_cast(ScreenshotManagerAni::Save)}, + }; + if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { + TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); + return ANI_NOT_FOUND; + } + *result = ANI_VERSION_1; + return ANI_OK; +} +} + +} \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp new file mode 100644 index 0000000000..a129359125 --- /dev/null +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -0,0 +1,146 @@ +/* + * 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 + +#include "ani.h" +#include "screenshot_ani_utils.h" +#include "singleton_container.h" +#include "window_manager_hilog.h" +#include "dm_common.h" +#include "refbase.h" + +namespace OHOS::Rosen { +ani_status ScreenshotAniUtils::GetStdString(ani_env *env, ani_string ani_str, std::string &result) +{ + ani_size strSize; + ani_status ret = env->String_GetUTF8Size(ani_str, &strSize); + if (ret != ANI_OK) { + return ret; + } + std::vector buffer(strSize + 1); + char* utf8_buffer = buffer.data(); + ani_size bytes_written = 0; + ret = env->String_GetUTF8(ani_str, utf8_buffer, strSize + 1, &bytes_written); + if (ret != ANI_OK) { + return ret; + } + utf8_buffer[bytes_written] = '\0'; + result = std::string(utf8_buffer); + return ret; +} + +ani_object ScreenshotAniUtils::CreateAniUndefined(ani_env* env) +{ + ani_ref aniRef; + env->GetUndefined(&aniRef); + return static_cast(aniRef); +} + +ani_status ScreenshotAniUtils::GetAniString(ani_env* env, const std::string& str, ani_string* result) +{ + return env->String_NewUTF8(str.c_str(), static_cast(str.size()), result); +} + +void ScreenshotAniUtils::ConvertScreenshot(ani_env *env, std::shared_ptr image, ani_object obj) +{ + return; +} + +ani_status ScreenshotAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, + const char* fn, const char* signature, ...) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin"); + ani_status ret = ANI_OK; + ani_namespace aniNamespace{}; + if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns %{public}d", ret); + return ret; + } + ani_function func{}; + if ((ret = env->Namespace_FindFunction(aniNamespace, fn, signature, &func)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); + return ret; + } + if (func == nullptr) { + TLOGI(WmsLogTag::DEFAULT, "[ANI] null func ani"); + return ret; + } + va_list args; + va_start(args, signature); + TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); + ret = env->Function_Call_Void_V(func, args); + va_end(args); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]canot run callBack %{public}d", ret); + return ret; + } + return ret; +} + +void ScreenshotAniUtils::GetScreenshotParam(ani_env *env, std::unique_ptr ¶m, ani_object options) +{ + if (param == nullptr) { + TLOGI(WmsLogTag::DMS, "[ANI] null param"); + return; + } + ani_double displayId; + env->Object_GetPropertyByName_Double(options, "displayId", &displayId); + param->option.displayId = static_cast(displayId); + ani_double rotation; + env->Object_GetPropertyByName_Double(options, "rotation", &rotation); + param->option.rotation = static_cast(rotation); + ani_double isNeedNotify; + env->Object_GetPropertyByName_Double(options, "isNeedNotify", &isNeedNotify); + param->option.isNeedNotify = static_cast(isNeedNotify); + ani_double isNeedPointer; + env->Object_GetPropertyByName_Double(options, "isNeedPointer", &isNeedPointer); + param->option.isNeedPointer = static_cast(isNeedPointer); + GetScreenshotSize(env, param, options); + GetScreenshotRect(env, param, options); +} + +void ScreenshotAniUtils::GetScreenshotSize(ani_env *env, std::unique_ptr ¶m, ani_object options) +{ + ani_ref obj; + env->Object_GetPropertyByName_Ref(options, "imageSize", &obj); + ani_double width; + ani_double height; + env->Object_GetPropertyByName_Double(static_cast(obj), "width", &width); + env->Object_GetPropertyByName_Double(static_cast(obj), "height", &height); + param->option.size.width = static_cast(width); + param->option.size.height = static_cast(height); + TLOGI(WmsLogTag::DMS, "[ANI] get imageSize width = %{public}d, height = %{public}d", + param->option.size.width, param->option.size.height); +} + +void ScreenshotAniUtils::GetScreenshotRect(ani_env *env, std::unique_ptr ¶m, ani_object options) +{ + ani_ref obj; + env->Object_GetPropertyByName_Ref(options, "screenRect", &obj); + ani_double left; + ani_double top; + ani_double width; + ani_double height; + env->Object_GetPropertyByName_Double(static_cast(obj), "left", &left); + env->Object_GetPropertyByName_Double(static_cast(obj), "top", &top); + env->Object_GetPropertyByName_Double(static_cast(obj), "width", &width); + env->Object_GetPropertyByName_Double(static_cast(obj), "height", &height); + param->option.rect.left = static_cast(left); + param->option.rect.top = static_cast(top); + param->option.rect.width = static_cast(width); + param->option.rect.height = static_cast(height); +} +} \ No newline at end of file -- Gitee From 46a79953fb5cc280edda6ba12ec42a9e4a0568dc Mon Sep 17 00:00:00 2001 From: kaicui Date: Sat, 12 Jul 2025 19:44:49 +0800 Subject: [PATCH 010/109] Fix noInteractionDetected problems Signed-off-by: kaicui --- .../window_stage_ani/include/ani_window_listener.h | 3 +++ .../window_stage_ani/src/ani_window_listener.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 3dbbc78a75..f8a894c31f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -114,6 +114,8 @@ public: void OnSubWindowClose(bool& terminateCloseProcess) override; void OnWindowHighlightChange(bool isHighlight) override; void OnMainWindowClose(bool& terminateCloseProcess) override; + void SetTimeout(int64_t timeout) override; + int64_t GetTimeout() const override; private: void OnLastStrongRef(const void *) override; @@ -121,6 +123,7 @@ private: Rect currRect_ = {0, 0, 0, 0}; WindowState state_ {WindowState::STATE_INITIAL}; void LifeCycleCallBack(LifeCycleEventType eventType); + int64_t noInteractionTimeout_ = 0; ani_env* env_ = nullptr; ani_ref aniCallBack_; CaseType caseType_ = CaseType::CASE_WINDOW; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index d3bd0a9195..b9044edaa2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -338,6 +338,16 @@ void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } +void AniWindowListener::SetTimeout(int64_t timeout) +{ + noInteractionTimeout_ = timeout; +} + +int64_t AniWindowListener::GetTimeout() const +{ + return noInteractionTimeout_; +} + void AniWindowListener::OnWindowNoInteractionCallback() { TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); -- Gitee From 69b53720dc7860e215c70055df52a07a00a56184 Mon Sep 17 00:00:00 2001 From: tanliang Date: Mon, 14 Jul 2025 09:51:21 +0800 Subject: [PATCH 011/109] =?UTF-8?q?=E4=BC=98=E5=8C=96loadcontent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tanliang --- .../window_stage_ani/ets/@ohos.window.ets | 42 ++++------ .../window_stage_ani/include/ani_window.h | 6 +- .../include/ani_window_register_manager.h | 8 +- .../include/ani_window_stage.h | 8 +- .../window_stage_ani/src/ani_window.cpp | 37 +-------- .../src/ani_window_register_manager.cpp | 12 +-- .../window_stage_ani/src/ani_window_stage.cpp | 83 +++++++++---------- 7 files changed, 70 insertions(+), 126 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index b762f48abb..b61b76d5ea 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1719,17 +1719,11 @@ export class TranslateOptionsInternal implements TranslateOptions { z?: number; } -export native function windowDestroyCallback(nativeObj: long): void; -let windowDestroyRegister = new FinalizationRegistry(windowDestroyCallback); - export class WindowStageInternal implements WindowStage { static { loadLibrary('windowstageani_kit.z') } private nativeObj: long = 0; setNativeObj(nativeObj: long):void { - if (!this.nativeObj) { - windowDestroyRegister.register(this, this.nativeObj); - } this.nativeObj = nativeObj; } @@ -1737,7 +1731,6 @@ export class WindowStageInternal implements WindowStage { public native isWindowRectAutoSave(nativeObj: long): boolean; public native removeStartingWindow(nativeObj: long): void; public native loadContentSync(nativeObj: long, path: string, storage?: LocalStorage): void; - public native loadContent(nativeObj:long, path: String): int; public native disableWindowDecorSync(nativeObj:long): void; public native setShowOnLockScreenSync(nativeObj:long, showOnLockScreen: boolean): void; public native getMainWindowSync(nativeObj: long): Window; @@ -1814,23 +1807,14 @@ export class WindowStageInternal implements WindowStage { } public loadContent(path: string, callback: AsyncCallback): void { - // uicontent not support taskpool, must use ui thread - let ret = this.loadContent(this.nativeObj, String(path)); - if (ret == WMError_WM_DO_NOTHING) { - throw {code: WmErrorCode_WM_ERROR_STAGE_ABNORMALLY, message: - "This window state is abnormal."} as BusinessError; - } else if (ret == WMError_WM_ERROR_INVALID_PARAM) { - throw {code: WmErrorCode_WM_ERROR_INVALID_PARAM, message: - "Parameter error. Possible cause: 1. Mandatory parameters are left unspecified; " + - "2. Incorrect parameter types."} as BusinessError; - } - callback({code: WmErrorCode_WM_OK, message: ""} as BusinessError, undefined); + try { + this.loadContentSync(this.nativeObj, path, undefined); + callback(new BusinessError(), undefined); + } catch (err: Error) { + callback(err as BusinessError, undefined); + } } - public loadContentByName(name: string, callback: AsyncCallbackVoid): void { - let ret = this.loadContent(this.nativeObj, name); - } - public disableWindowDecor(): void { this.disableWindowDecorSync(this.nativeObj); } @@ -1907,7 +1891,6 @@ export interface WindowStage { loadContent(path: string, storage: LocalStorage, callback: AsyncCallback): void; loadContent(path: string, storage?: LocalStorage): Promise; loadContent(path: string, callback: AsyncCallback): void; - loadContentByName(name: string, callback: AsyncCallbackVoid): void; getMainWindowSync(): Window; getMainWindow(): Promise; getMainWindow(callback: AsyncCallback): void; @@ -1919,13 +1902,19 @@ export interface WindowStage { off(eventType: 'windowStageEvent', callback?: Callback): void; } +export native function windowDestroyCallback(nativeObj: long): void; +let windowDestroyRegister = new FinalizationRegistry(windowDestroyCallback); + export class WindowInternal implements Window { static readonly DEFAULT_RET_VAL = 1; static { loadLibrary('windowstageani_kit.z') } private nativeObj: long; - public setNativeObj(nativeObj: long): void { - this.nativeObj = nativeObj; + public setNativeObj(nativeObject: long): void { + if (!this.nativeObj) { + windowDestroyRegister.register(this, nativeObject); + } + this.nativeObj = nativeObject; } private native setFollowParentWindowLayoutEnabled(nativeObj: long, enabled: boolean): void; @@ -1979,8 +1968,7 @@ export class WindowInternal implements Window { private native setWindowPrivacyModeSync(nativeObj: long, isPrivacyMode: boolean): void; private native recoverSync(nativeObj: long): void; private native setUIContentSync(nativeObj: long, path: string): void; - private native loadContentSync(nativeObj: long, path: string, storage: LocalStorage): void; - private native loadContentSync(nativeObj: long, path: string): void; + private native loadContentSync(nativeObj: long, path: string, storage?: LocalStorage): void; private native setWindowKeepScreenOnSync(nativeObj: long, isKeepScreenOn: boolean): void; private native setWindowSystemBarEnableSync(nativeObj: long, names: Array<'status' | 'navigation'>): void; private native getUIContextSync(nativeObj: long): UIContext; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b1043f8a31..2ad7d6b84f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -49,8 +49,7 @@ public: static void SetWaterMarkFlag(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enable); static void SetWindowFocusable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isFocusable); static void setWindowTouchable(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isTouchable); - static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path); - static void LoadContentNew(ani_env* env, ani_object obj, ani_long nativeObj, + static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage); static void SetWindowSystemBarEnable(ani_env* env, ani_object obj, ani_long nativeObj, ani_object nameAry); static ani_object GetUIContext(ani_env* env, ani_object obj, ani_long nativeObj); @@ -125,7 +124,6 @@ private: void OnSetWindowKeepScreenOn(ani_env* env, ani_boolean isKeepScreenOn); void OnSetWaterMarkFlag(ani_env* env, ani_boolean enable); void OnSetWindowFocusable(ani_env* env, ani_boolean isFocusable); - void OnLoadContent(ani_env* env, ani_string path); void OnLoadContent(ani_env* env, ani_string path, ani_object storage); void OnSetWindowSystemBarEnable(ani_env* env, ani_object nameAry); ani_object OnGetUIContext(ani_env* env); @@ -162,9 +160,9 @@ private: /* window obj stored in ANI */ AniWindow* GetWindowObjectFromAni(void* aniObj); ani_ref CreateAniWindowObject(ani_env* env, sptr& window); +ani_ref FindAniWindowObject(const std::string& windowName); void DropWindowObjectByAni(ani_object obj); ani_status ANI_Window_Constructor(ani_vm *vm, uint32_t *result); -ani_ref FindAniWindowObject(const std::string& windowName); } // namespace Rosen } // namespace OHOS #endif // OHOS_ANI_WINDOW_H diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index e54d265113..f97b13ce96 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -55,10 +55,10 @@ class AniWindowRegisterManager { public: AniWindowRegisterManager(); ~AniWindowRegisterManager(); - WmErrorCode RegisterListener(sptr window, std::string type, - CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout); - WmErrorCode UnregisterListener(sptr window, std::string type, - CaseType caseType, ani_env* env, ani_ref callback); + WmErrorCode RegisterListener(sptr window, const std::string& type, + CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout); + WmErrorCode UnregisterListener(sptr window, const std::string& type, + CaseType caseType, ani_env* env, ani_ref callback); private: bool IsCallbackRegistered(ani_env* env, std::string type, ani_ref jsListenerObject); WmErrorCode ProcessWindowChangeRegister(sptr listener, sptr window, bool isRegister, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h index e1df269730..e615db79ba 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h @@ -32,16 +32,14 @@ class AniWindowStage { public: explicit AniWindowStage(const std::shared_ptr& windowScene); ~AniWindowStage(); + static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, + ani_string path, ani_object storage); static void DisableWindowDecor(ani_env* env, ani_object obj, ani_long nativeObj); static void SetShowOnLockScreen(ani_env* env, ani_class cls, ani_long nativeObj, ani_boolean showOnLockScreen); static void RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); - static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, - ani_string path); - static void LoadContentWithStorage(ani_env* env, ani_object obj, ani_long nativeObj, - ani_string path, ani_object storage); void SetWindowRectAutoSave(ani_env* env, ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag); ani_boolean IsWindowRectAutoSave(ani_env* env); @@ -51,11 +49,11 @@ class AniWindowStage { ani_boolean WindowIsWindowSupportWideGamut(ani_env* env, ani_class cls, ani_object obj); ani_ref OnCreateSubWindow(ani_env *env, ani_string name); private: + void OnLoadContent(ani_env* env, ani_string path, ani_object storage); void OnDisableWindowDecor(ani_env* env); void OnSetShowOnLockScreen(ani_env* env, ani_boolean showOnLockScreen); void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); void OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); - void OnLoadContentWithStorage(ani_env* env, ani_string path, ani_object storage); std::weak_ptr windowScene_; std::unique_ptr registerManager_ = nullptr; }; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index cc285ec960..53b4d053f9 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -708,38 +708,7 @@ void AniWindow::OnSetWindowTouchable(ani_env* env, ani_boolean isKeepScreenOn) } } -void AniWindow::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path) -{ - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); - AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow != nullptr) { - aniWindow->OnLoadContent(env, path); - } else { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); - } -} - -void AniWindow::OnLoadContent(ani_env* env, ani_string path) -{ - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); - auto window = GetWindow(); - if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return; - } - std::string contentPath; - AniWindowUtils::GetStdString(env, path, contentPath); - TLOGI(WmsLogTag::DEFAULT, "[ANI] contentPath:%{public}s", contentPath.c_str()); - WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->NapiSetUIContent(contentPath, env, nullptr)); - TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", - window->GetWindowId(), window->GetWindowName().c_str(), ret); - if (ret != WmErrorCode::WM_OK) { - AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); - } -} - -void AniWindow::LoadContentNew(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, +void AniWindow::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -2738,11 +2707,9 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::Recover)}, ani_native_function {"setUIContentSync", "JLstd/core/String;:V", reinterpret_cast(AniWindow::SetUIContent)}, - ani_native_function {"loadContentSync", "JLstd/core/String;:V", - reinterpret_cast(AniWindow::LoadContent)}, ani_native_function {"loadContentSync", "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", - reinterpret_cast(AniWindow::LoadContentNew)}, + reinterpret_cast(AniWindow::LoadContent)}, ani_native_function {"setWindowKeepScreenOnSync", "JZ:V", reinterpret_cast(AniWindow::SetWindowKeepScreenOn)}, ani_native_function {"setWindowSystemBarEnableSync", "JLescompat/Array;:V", diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 08ee5d0e73..3a8a89a7ee 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -382,7 +382,7 @@ bool AniWindowRegisterManager::IsCallbackRegistered(ani_env* env, std::string ty return false; } -WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, std::string type, +WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, const std::string& type, CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout) { std::lock_guard lock(mtx_); @@ -416,7 +416,7 @@ WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, std: TLOGE(WmsLogTag::DEFAULT, "[ANI]Register type %{public}s failed", type.c_str()); return ret; } - jsCbMap_[type][callback] = windowManagerListener; + jsCbMap_[type][cbRef] = windowManagerListener; TLOGI(WmsLogTag::DEFAULT, "[ANI]Register type %{public}s success! callback map size: %{public}zu", type.c_str(), jsCbMap_[type].size()); return WmErrorCode::WM_OK; @@ -500,7 +500,7 @@ WmErrorCode AniWindowRegisterManager::ProcessListener(RegisterListenerType regis return WmErrorCode::WM_OK; } -WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, std::string type, +WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, const std::string& type, CaseType caseType, ani_env* env, ani_ref callback) { std::lock_guard lock(mtx_); @@ -522,7 +522,7 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, st ani_boolean isUndef = ANI_FALSE; env->Reference_IsUndefined(callback, &isUndef); if (isUndef == ANI_TRUE) { - TLOGD(WmsLogTag::DEFAULT, "[ANI]Unregister all callback, type:%{public}s", type.c_str()); + TLOGI(WmsLogTag::DEFAULT, "[ANI]Unregister all callback, type:%{public}s", type.c_str()); for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { WmErrorCode ret = ProcessListener(listenerType, caseType, it->second, window, false, env, 0); if (ret != WmErrorCode::WM_OK) { @@ -536,8 +536,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, st bool findFlag = false; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end(); ++it) { ani_boolean isEquals = 0; - env->Reference_StrictEquals(callback, it->second->GetAniCallBack(), &isEquals); - TLOGD(WmsLogTag::DEFAULT, "[ANI]callback isEquals:%{public}d", static_cast(isEquals)); + env->Reference_StrictEquals(callback, it->first, &isEquals); + TLOGI(WmsLogTag::DEFAULT, "[ANI]callback isEquals:%{public}d", static_cast(isEquals)); if (!isEquals) { continue; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index e5f61e5901..d05d70b9ce 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -45,6 +45,43 @@ AniWindowStage::~AniWindowStage() TLOGE(WmsLogTag::DEFAULT, "[ANI] Ani WindowStage died"); } +void AniWindowStage::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, + ani_object storage) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnLoadContent(env, path, storage); + } else { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnLoadContent(ani_env* env, ani_string path, ani_object storage) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto mainWindow = windowScene->GetMainWindow(); + if (mainWindow == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string contentPath; + AniWindowUtils::GetStdString(env, path, contentPath); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(mainWindow->NapiSetUIContent(contentPath, env, storage)); + TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", + mainWindow->GetWindowId(), mainWindow->GetWindowName().c_str(), ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); + } +} + ani_ref AniWindowStage::GetMainWindow(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI] Get main window"); @@ -353,48 +390,6 @@ void AniWindowStage::RemoveStartingWindow(ani_env* env) } } -void AniWindowStage::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path) -{ - AniWindowStage::LoadContentWithStorage(env, obj, nativeObj, path, nullptr); -} - -void AniWindowStage::LoadContentWithStorage(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, - ani_object storage) -{ - TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); - AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); - if (aniWindowStage != nullptr) { - aniWindowStage->OnLoadContentWithStorage(env, path, storage); - } else { - TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowStage is nullptr"); - } -} - -void AniWindowStage::OnLoadContentWithStorage(ani_env* env, ani_string path, ani_object storage) -{ - TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); - auto windowScene = GetWindowScene().lock(); - if (windowScene == nullptr) { - TLOGE(WmsLogTag::WMS_LIFE, "[ANI]windowScene is nullptr!"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return; - } - auto mainWindow = windowScene->GetMainWindow(); - if (mainWindow == nullptr) { - TLOGE(WmsLogTag::WMS_LIFE, "[ANI] mainWindow is nullptr!"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return; - } - std::string contentPath; - AniWindowUtils::GetStdString(env, path, contentPath); - WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(mainWindow->NapiSetUIContent(contentPath, env, storage)); - TLOGI(WmsLogTag::WMS_LIFE, "[ANI] Window [%{public}u, %{public}s] load content end, ret=%{public}d", - mainWindow->GetWindowId(), mainWindow->GetWindowName().c_str(), ret); - if (ret != WmErrorCode::WM_OK) { - AniWindowUtils::AniThrowError(env, ret, "Window load content failed"); - } -} - ani_ref AniWindowStage::OnCreateSubWindow(ani_env* env, ani_string name) { std::string windowName; @@ -508,11 +503,9 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(IsWindowRectAutoSave)}, ani_native_function {"removeStartingWindow", "J:V", reinterpret_cast(RemoveStartingWindow)}, - ani_native_function {"loadContent", "JLstd/core/String;:I", - reinterpret_cast(AniWindowStage::LoadContent)}, ani_native_function {"loadContentSync", "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", - reinterpret_cast(AniWindowStage::LoadContentWithStorage)}, + reinterpret_cast(AniWindowStage::LoadContent)}, ani_native_function {"disableWindowDecorSync", nullptr, reinterpret_cast(AniWindowStage::DisableWindowDecor)}, ani_native_function {"setShowOnLockScreenSync", -- Gitee From b56f645f0377ef170663e5ab87e0969d66cda9cc Mon Sep 17 00:00:00 2001 From: chenpeng Date: Sat, 12 Jul 2025 17:39:02 +0800 Subject: [PATCH 012/109] =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=A4=A7=E9=A9=BC?= =?UTF-8?q?=E5=B3=B0=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/include/display_ani.h | 6 +- .../display_ani/include/display_ani_manager.h | 30 +++---- .../display_ani/include/display_ani_utils.h | 8 +- .../display_ani/src/display_ani.cpp | 55 +++++++------ .../display_ani/src/display_ani_listener.cpp | 2 +- .../display_ani/src/display_ani_manager.cpp | 78 +++++++++---------- .../display_ani/src/display_ani_utils.cpp | 29 +++---- .../screen_ani/ets/@ohos.screen.ets | 4 +- .../screen_ani/include/screen_ani_manager.h | 16 ++-- .../screen_ani/src/screen_ani_manager.cpp | 46 +++++------ 10 files changed, 133 insertions(+), 141 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index ec4d4e888a..b686edaa49 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -26,8 +26,8 @@ class DisplayAni { public: explicit DisplayAni(const sptr& display); - static void getCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj); - static void getAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj); + static void GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj); + static void GetAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj); static ani_boolean HasImmersiveWindow(ani_env* env, ani_object obj); static void RegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); static void UnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); @@ -37,7 +37,7 @@ public: private: DMError UnregisterAllDisplayListenerWithType(std::string type); DMError UnregisterDisplayListenerWithType(std::string type, ani_env *env, ani_ref aniCallback); - bool IsCallbackRegistered(ani_env* env, ani_string& type, ani_ref callback); + bool IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback); sptr display_ = nullptr; std::map>> jsCbMap_; std::mutex mtx_; diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h index cc6c6b17c9..de5515815a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h @@ -25,32 +25,32 @@ namespace Rosen { class DisplayManagerAni { public: explicit DisplayManagerAni(); - static ani_status initDisplayManagerAni(ani_namespace displayNameSpace, ani_env* env); + static ani_status InitDisplayManagerAni(ani_namespace displayNameSpace, ani_env* env); - static ani_int getFoldDisplayModeAni(ani_env* env); - static ani_boolean isFoldableAni(ani_env* env); - static ani_int getFoldStatus(ani_env* env); + static ani_int GetFoldDisplayModeAni(ani_env* env); + static ani_boolean IsFoldableAni(ani_env* env); + static ani_int GetFoldStatus(ani_env* env); static ani_boolean IsCaptured(ani_env* env); - static void getCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj); + static void GetCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj); - static void getAllDisplaysAni(ani_env* env, ani_object arrayObj); - static void getDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId); - static void getDefaultDisplaySyncAni(ani_env* env, ani_object obj); + static void GetAllDisplaysAni(ani_env* env, ani_object arrayObj); + static void GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId); + static void GetDefaultDisplaySyncAni(ani_env* env, ani_object obj); - static void registerCallback(ani_env* env, ani_string type, + static void RegisterCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj); - static void unRegisterCallback(ani_env* env, ani_string type, + static void UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback); DMError UnRegisterDisplayListenerWithType(std::string type, ani_env* env, ani_ref callback); DMError UnregisterAllDisplayListenerWithType(std::string type); - DmErrorCode processRegisterCallback(ani_env* env, std::string& typeStr, + DmErrorCode ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr displayAniListener); - static ani_boolean hasPrivateWindow(ani_env* env, ani_double displayId); + static ani_boolean HasPrivateWindow(ani_env* env, ani_double displayId); static void GetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj, ani_long nativeObj); private: - void onRegisterCallback(ani_env* env, ani_string type, ani_ref callback); - void onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); - void onGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj); + void OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); + void OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); + void OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj); void OnGetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj); std::mutex mtx_; std::map>> jsCbMap_; diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h index 43949dc4f3..aefa5bb444 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h @@ -29,15 +29,15 @@ namespace Rosen { class DisplayAniUtils { public: -static void convertRect(DMRect rect, ani_object rectObj, ani_env* env); +static void ConvertRect(DMRect rect, ani_object rectObj, ani_env* env); -static void convertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, +static void ConvertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, ani_object waterfallObj, ani_env *env); -static void convertDisplayPhysicalResolution(std::vector &displayPhysicalArray, +static void ConvertDisplayPhysicalResolution(std::vector &displayPhysicalArray, ani_object arrayObj, ani_env *env); -static ani_status cvtDisplay(sptr display, ani_env* env, ani_object obj); +static ani_status CvtDisplay(sptr display, ani_env* env, ani_object obj); static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 147db378f6..16eabb6992 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -35,10 +35,10 @@ DisplayAni::DisplayAni(const sptr& display) : display_(display) { } -void DisplayAni::getCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj) +void DisplayAni::GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj) { auto display = SingletonContainer::Get().GetDefaultDisplay(); - TLOGI(WmsLogTag::DMS, "[ANI] getCutoutInfo begin"); + TLOGI(WmsLogTag::DMS, "[ANI] GetCutoutInfo begin"); sptr cutoutInfo = display->GetCutoutInfo(); if (cutoutInfo == nullptr) { AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); @@ -61,16 +61,16 @@ void DisplayAni::getCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutIn TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); - DisplayAniUtils::convertRect(rects[i], static_cast(currentCutoutInfo), env); + DisplayAniUtils::ConvertRect(rects[i], static_cast(currentCutoutInfo), env); } // waterfall area ani_ref waterfallObj = nullptr; env->Object_GetFieldByName_Ref(cutoutInfoObj, "waterfallDisplayAreaRects", &waterfallObj); auto waterfallDisplayAreaRects = cutoutInfo->GetWaterfallDisplayAreaRects(); - DisplayAniUtils::convertWaterArea(waterfallDisplayAreaRects, static_cast(waterfallObj), env); + DisplayAniUtils::ConvertWaterArea(waterfallDisplayAreaRects, static_cast(waterfallObj), env); } -void DisplayAni::getAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj) +void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_double id; @@ -88,7 +88,7 @@ void DisplayAni::getAvailableArea(ani_env* env, ani_object obj, ani_object avail "JsDisplay::GetAvailableArea failed."); return; } - DisplayAniUtils::convertRect(area, availableAreaObj, env); + DisplayAniUtils::ConvertRect(area, availableAreaObj, env); } ani_boolean DisplayAni::HasImmersiveWindow(ani_env* env, ani_object obj) @@ -111,7 +111,7 @@ ani_boolean DisplayAni::HasImmersiveWindow(ani_env* env, ani_object obj) return immersive; } -bool DisplayAni::IsCallbackRegistered(ani_env* env, ani_string& type, ani_ref callback) +bool DisplayAni::IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback) { if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "method %{public}s not registered.", type.c_str()); @@ -119,14 +119,13 @@ bool DisplayAni::IsCallbackRegistered(ani_env* env, ani_string& type, ani_ref ca } for (const auto& iter : jsCbMap_[type]) { ani_boolean isEquals = false; - env->Reference_StrictEquals(callback, iter.first, $isEquals); + env->Reference_StrictEquals(callback, iter.first, &isEquals); if (isEquals) { TLOGE(WmsLogTag::DMS, "callback is already registered!"); return true; } } return false; - } void DisplayAni::RegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref callback) @@ -156,7 +155,7 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); return; } - if (IsCallbackRegistered(env, type, callback)) { + if (IsCallbackRegistered(env, typeString, callback)) { TLOGI(WmsLogTag::DMS, "Callback has already been registered!"); return; } @@ -211,10 +210,10 @@ void DisplayAni::OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string t env->Reference_IsUndefined(callback, &callbackNull); DmErrorCode ret; if (callbackNull) { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback for all"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); } else { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback with type"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback with type"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterDisplayListenerWithType(typeString, env, callback)); } @@ -260,15 +259,15 @@ DMError DisplayAni::UnregisterDisplayListenerWithType(std::string type, ani_env* } DMError ret = DMError::DM_OK; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { - bool isEquals = it->second->IsAniCallBackExist(env, type, callback); + ani_boolean isEquals = 0; + env->Reference_StrictEquals(callback, it->first, &isEquals); if (isEquals) { - TLOGI(WmsLogTag::DMS, "[ANI] isEquals check begin"); it->second->RemoveCallback(env, type, callback); if (type == EVENT_AVAILABLE_AREA_CHANGED) { TLOGI(WmsLogTag::DMS, "[ANI] start to unregis display event listener! event = %{public}s", type.c_str()); auto displayId = display_->GetId(); - sptr thisListener(it->second); + sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener, displayId); } else { @@ -312,26 +311,26 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } - DisplayManagerAni::initDisplayManagerAni(nsp, env); + DisplayManagerAni::InitDisplayManagerAni(nsp, env); std::array funcs = { - ani_native_function {"isFoldable", ":Z", reinterpret_cast(DisplayManagerAni::isFoldableAni)}, + ani_native_function {"isFoldable", ":Z", reinterpret_cast(DisplayManagerAni::IsFoldableAni)}, ani_native_function {"getFoldDisplayModeNative", ":I", - reinterpret_cast(DisplayManagerAni::getFoldDisplayModeAni)}, - ani_native_function {"getFoldStatusNative", ":I", reinterpret_cast(DisplayManagerAni::getFoldStatus)}, + reinterpret_cast(DisplayManagerAni::GetFoldDisplayModeAni)}, + ani_native_function {"getFoldStatusNative", ":I", reinterpret_cast(DisplayManagerAni::GetFoldStatus)}, ani_native_function {"getCurrentFoldCreaseRegionNative", "Lstd/core/Object;J:V", - reinterpret_cast(DisplayManagerAni::getCurrentFoldCreaseRegion)}, + reinterpret_cast(DisplayManagerAni::GetCurrentFoldCreaseRegion)}, ani_native_function {"getDisplayByIdSyncNative", "Lstd/core/Object;D:V", - reinterpret_cast(DisplayManagerAni::getDisplayByIdSyncAni)}, + reinterpret_cast(DisplayManagerAni::GetDisplayByIdSyncAni)}, ani_native_function {"getDefaultDisplaySyncNative", "Lstd/core/Object;:V", - reinterpret_cast(DisplayManagerAni::getDefaultDisplaySyncAni)}, + reinterpret_cast(DisplayManagerAni::GetDefaultDisplaySyncAni)}, ani_native_function {"getAllDisplaysSyncNative", "Lescompat/Array;:V", - reinterpret_cast(DisplayManagerAni::getAllDisplaysAni)}, + reinterpret_cast(DisplayManagerAni::GetAllDisplaysAni)}, ani_native_function {"syncOn", nullptr, - reinterpret_cast(DisplayManagerAni::registerCallback)}, + reinterpret_cast(DisplayManagerAni::RegisterCallback)}, ani_native_function {"syncOff", nullptr, - reinterpret_cast(DisplayManagerAni::unRegisterCallback)}, + reinterpret_cast(DisplayManagerAni::UnRegisterCallback)}, ani_native_function {"hasPrivateWindow", nullptr, - reinterpret_cast(DisplayManagerAni::hasPrivateWindow)}, + reinterpret_cast(DisplayManagerAni::HasPrivateWindow)}, ani_native_function {"getAllDisplayPhysicalResolutionNative", nullptr, reinterpret_cast(DisplayManagerAni::GetAllDisplayPhysicalResolution)}, ani_native_function {"isCaptured", nullptr, reinterpret_cast(DisplayManagerAni::IsCaptured)}, @@ -348,9 +347,9 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } std::array methods = { ani_native_function {"getCutoutInfoInternal", "L@ohos/display/display/CutoutInfo;:V", - reinterpret_cast(DisplayAni::getCutoutInfo)}, + reinterpret_cast(DisplayAni::GetCutoutInfo)}, ani_native_function {"getAvailableAreaInternal", "L@ohos/display/display/Rect;:V", - reinterpret_cast(DisplayAni::getAvailableArea)}, + reinterpret_cast(DisplayAni::GetAvailableArea)}, ani_native_function {"hasImmersiveWindowInternal", ":Z", reinterpret_cast(DisplayAni::HasImmersiveWindow)}, ani_native_function {"syncOn", nullptr, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 57b7227962..c95bf10d7e 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -374,7 +374,7 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) auto it = aniCallBack_.find(EVENT_AVAILABLE_AREA_CHANGED); for (auto oneAniCallback : it->second) { ani_object rectObj = nullptr; - DisplayAniUtils::convertRect(area, rectObj, env_); + DisplayAniUtils::ConvertRect(area, rectObj, env_); auto task = [env = env_, oneAniCallback, rectObj] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "availableAreaChangedCallback", nullptr, oneAniCallback, rectObj); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index 16651c05c8..d02ad621bb 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -36,7 +36,7 @@ DisplayManagerAni::DisplayManagerAni() { } -ani_status DisplayManagerAni::initDisplayManagerAni(ani_namespace displayNameSpace, ani_env* env) +ani_status DisplayManagerAni::InitDisplayManagerAni(ani_namespace displayNameSpace, ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_function setObjFunc = nullptr; @@ -54,14 +54,14 @@ ani_status DisplayManagerAni::initDisplayManagerAni(ani_namespace displayNameSpa return ret; } -ani_int DisplayManagerAni::getFoldDisplayModeAni(ani_env* env) +ani_int DisplayManagerAni::GetFoldDisplayModeAni(ani_env* env) { auto mode = SingletonContainer::Get().GetFoldDisplayMode(); TLOGI(WmsLogTag::DMS, "[ANI]" PRIu64", getFoldDisplayMode = %{public}u", mode); return static_cast(mode); } -ani_boolean DisplayManagerAni::isFoldableAni(ani_env* env) +ani_boolean DisplayManagerAni::IsFoldableAni(ani_env* env) { bool foldable = SingletonContainer::Get().IsFoldable(); TLOGI(WmsLogTag::DMS, "[ANI]" PRIu64", isFoldable = %{public}u", foldable); @@ -75,37 +75,37 @@ ani_boolean DisplayManagerAni::IsCaptured(ani_env* env) return static_cast(isCapture); } -ani_int DisplayManagerAni::getFoldStatus(ani_env* env) +ani_int DisplayManagerAni::GetFoldStatus(ani_env* env) { auto status = SingletonContainer::Get().GetFoldStatus(); - TLOGI(WmsLogTag::DMS, "[ANI]" PRIu64", getFoldStatus = %{public}u", status); + TLOGI(WmsLogTag::DMS, "[ANI]" PRIu64", GetFoldStatus = %{public}u", status); return static_cast(status); } -void DisplayManagerAni::getCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj) +void DisplayManagerAni::GetCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj) { DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); if (displayManagerAni != nullptr) { - displayManagerAni->onGetCurrentFoldCreaseRegion(env, obj); + displayManagerAni->OnGetCurrentFoldCreaseRegion(env, obj); } else { TLOGI(WmsLogTag::DMS, "[ANI] null ptr"); } } -void DisplayManagerAni::onGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj) +void DisplayManagerAni::OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj) { - TLOGI(WmsLogTag::DMS, "[ANI] getCurrentFoldCreaseRegion begin instance"); + TLOGI(WmsLogTag::DMS, "[ANI] GetCurrentFoldCreaseRegion begin instance"); sptr region = SingletonContainer::Get().GetCurrentFoldCreaseRegion(); if (region == nullptr) { return; } - TLOGI(WmsLogTag::DMS, "[ANI] SingletonContainer getCurrentFoldCreaseRegion"); + TLOGI(WmsLogTag::DMS, "[ANI] SingletonContainer GetCurrentFoldCreaseRegion"); uint64_t displayId = region->GetDisplayId(); std::vector rects = region->GetCreaseRects(); if (rects.size() == 0) { return; } - TLOGI(WmsLogTag::DMS, "[ANI] DisplayManager getCurrentFoldCreaseRegion success %{public}d", (int)displayId); + TLOGI(WmsLogTag::DMS, "[ANI] DisplayManager GetCurrentFoldCreaseRegion success %{public}d", (int)displayId); if (ANI_OK != env->Object_SetFieldByName_Double(obj, "displayId", (ani_double)displayId)) { TLOGE(WmsLogTag::DMS, "[ANI] set displayId field fail"); } @@ -125,13 +125,13 @@ void DisplayManagerAni::onGetCurrentFoldCreaseRegion(ani_env* env, ani_object ob TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); - DisplayAniUtils::convertRect(rects[i], static_cast(currentCrease), env); + DisplayAniUtils::ConvertRect(rects[i], static_cast(currentCrease), env); } } -void DisplayManagerAni::getAllDisplaysAni(ani_env* env, ani_object arrayObj) +void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) { - TLOGI(WmsLogTag::DMS, "[ANI] getAllDisplaysAni start"); + TLOGI(WmsLogTag::DMS, "[ANI] GetAllDisplaysAni start"); std::vector> displays = SingletonContainer::Get().GetAllDisplays(); if (displays.empty()) { AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); @@ -148,15 +148,15 @@ void DisplayManagerAni::getAllDisplaysAni(ani_env* env, ani_object arrayObj) TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); - DisplayAniUtils::cvtDisplay(displays[i], env, static_cast(currentDisplay)); + DisplayAniUtils::CvtDisplay(displays[i], env, static_cast(currentDisplay)); DisplayAni::CreateDisplayAni(displays[i], static_cast(currentDisplay), env); } - TLOGI(WmsLogTag::DMS, "[ANI] getAllDisplaysAni end"); + TLOGI(WmsLogTag::DMS, "[ANI] GetAllDisplaysAni end"); } -void DisplayManagerAni::getDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId) +void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId) { - TLOGE(WmsLogTag::DMS, "[ANI] getDisplayByIdSyncAni begin"); + TLOGE(WmsLogTag::DMS, "[ANI] GetDisplayByIdSyncAni begin"); if (displayId < 0) { TLOGE(WmsLogTag::DMS, "[ANI] Invalid displayId, less than 0"); return; @@ -169,37 +169,37 @@ void DisplayManagerAni::getDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_ TLOGE(WmsLogTag::DMS, "[ANI] Display null"); return; } - DisplayAniUtils::cvtDisplay(display, env, obj); + DisplayAniUtils::CvtDisplay(display, env, obj); DisplayAni::CreateDisplayAni(display, static_cast(obj), env); } -void DisplayManagerAni::getDefaultDisplaySyncAni(ani_env* env, ani_object obj) +void DisplayManagerAni::GetDefaultDisplaySyncAni(ani_env* env, ani_object obj) { sptr display = SingletonContainer::Get().GetDefaultDisplaySync(true); if (display == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] Display null"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] getDefaultDisplaySyncAni"); - DisplayAniUtils::cvtDisplay(display, env, obj); + TLOGI(WmsLogTag::DMS, "[ANI] GetDefaultDisplaySyncAni"); + DisplayAniUtils::CvtDisplay(display, env, obj); DisplayAni::CreateDisplayAni(display, static_cast(obj), env); return; } -void DisplayManagerAni::registerCallback(ani_env* env, ani_string type, +void DisplayManagerAni::RegisterCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj) { DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); if (displayManagerAni != nullptr) { - displayManagerAni->onRegisterCallback(env, type, callback); + displayManagerAni->OnRegisterCallback(env, type, callback); } else { TLOGI(WmsLogTag::DMS, "[ANI] null ptr"); } } -void DisplayManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_ref callback) +void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] onRegisterCallback"); + TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback"); std::lock_guard lock(mtx_); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); @@ -228,7 +228,7 @@ void DisplayManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_re displayAniListener->AddCallback(typeString, cbRef); displayAniListener->SetMainEventHandler(); - ret = processRegisterCallback(env, typeString, displayAniListener); + ret = ProcessRegisterCallback(env, typeString, displayAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register display listener with type, errcode: %{public}d", ret); std::string errMsg = "Failed to register display listener with type"; @@ -239,12 +239,12 @@ void DisplayManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_re jsCbMap_[typeString][callback] = displayAniListener; } -DmErrorCode DisplayManagerAni::processRegisterCallback(ani_env* env, std::string& typeStr, +DmErrorCode DisplayManagerAni::ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr displayAniListener) { DmErrorCode ret = DmErrorCode::DM_ERROR_INVALID_PARAM; if (typeStr == EVENT_ADD || typeStr == EVENT_REMOVE || typeStr == EVENT_CHANGE) { - TLOGI(WmsLogTag::DMS, "processRegisterCallback %{public}s", typeStr.c_str()); + TLOGI(WmsLogTag::DMS, "ProcessRegisterCallback %{public}s", typeStr.c_str()); ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterDisplayListener(displayAniListener)); } else if (typeStr == EVENT_FOLD_STATUS_CHANGED) { @@ -269,21 +269,21 @@ DmErrorCode DisplayManagerAni::processRegisterCallback(ani_env* env, std::string return ret; } -void DisplayManagerAni::unRegisterCallback(ani_env* env, ani_string type, +void DisplayManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] unRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterCallback begin"); DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); if (displayManagerAni != nullptr) { - displayManagerAni->onUnRegisterCallback(env, type, callback); + displayManagerAni->OnUnRegisterCallback(env, type, callback); } else { TLOGI(WmsLogTag::DMS, "[ANI] null ptr"); } } -void DisplayManagerAni::onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) +void DisplayManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback begin"); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); @@ -291,10 +291,10 @@ void DisplayManagerAni::onUnRegisterCallback(ani_env* env, ani_string type, ani_ env->Reference_IsUndefined(callback, &callbackNull); DmErrorCode ret; if (callbackNull) { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback for all"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); } else { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback with type"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback with type"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterDisplayListenerWithType(typeString, env, callback)); } @@ -396,9 +396,9 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type return ret; } -ani_boolean DisplayManagerAni::hasPrivateWindow(ani_env* env, ani_double displayId) +ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_double displayId) { - TLOGI(WmsLogTag::DMS, "[ANI] DMS hasPrivateWindow begin"); + TLOGI(WmsLogTag::DMS, "[ANI] DMS HasPrivateWindow begin"); bool hasPrivateWindow = false; if (displayId < 0) { std::string errMsg = "Invalid args count, need one arg"; @@ -431,7 +431,7 @@ void DisplayManagerAni::OnGetAllDisplayPhysicalResolution(ani_env* env, ani_obje AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_SYSTEM_INNORMAL, "JsDisplayManager::OnGetAllDisplayPhysicalResolution failed."); } else { - DisplayAniUtils::convertDisplayPhysicalResolution(displayPhysicalArray, arrayObj, env); + DisplayAniUtils::ConvertDisplayPhysicalResolution(displayPhysicalArray, arrayObj, env); } } } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index c58ce11452..681f200b84 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -50,7 +50,7 @@ static const std::map NATIVE_TO_JS_DISPLAY_ }; -void DisplayAniUtils::convertRect(DMRect rect, ani_object rectObj, ani_env* env) +void DisplayAniUtils::ConvertRect(DMRect rect, ani_object rectObj, ani_env* env) { TLOGI(WmsLogTag::DMS, "[ANI] rect area info: %{public}d, %{public}d, %{public}u, %{public}u", rect.posX_, rect.posY_, rect.width_, rect.height_); @@ -60,7 +60,7 @@ void DisplayAniUtils::convertRect(DMRect rect, ani_object rectObj, ani_env* env) env->Object_SetFieldByName_Double(rectObj, "height", rect.height_); } -void DisplayAniUtils::convertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, +void DisplayAniUtils::ConvertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, ani_object waterfallObj, ani_env *env) { TLOGI(WmsLogTag::DMS, "[ANI] start convert WaterArea"); @@ -72,13 +72,13 @@ void DisplayAniUtils::convertWaterArea(WaterfallDisplayAreaRects waterfallDispla env->Object_GetFieldByName_Ref(waterfallObj, "right", &rightObj); env->Object_GetFieldByName_Ref(waterfallObj, "top", &topObj); env->Object_GetFieldByName_Ref(waterfallObj, "bottom", &bottomObj); - convertRect(waterfallDisplayAreaRects.left, static_cast(leftObj), env); - convertRect(waterfallDisplayAreaRects.right, static_cast(rightObj), env); - convertRect(waterfallDisplayAreaRects.top, static_cast(topObj), env); - convertRect(waterfallDisplayAreaRects.bottom, static_cast(bottomObj), env); + ConvertRect(waterfallDisplayAreaRects.left, static_cast(leftObj), env); + ConvertRect(waterfallDisplayAreaRects.right, static_cast(rightObj), env); + ConvertRect(waterfallDisplayAreaRects.top, static_cast(topObj), env); + ConvertRect(waterfallDisplayAreaRects.bottom, static_cast(bottomObj), env); } -void DisplayAniUtils::convertDisplayPhysicalResolution(std::vector& displayPhysicalArray, +void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vector& displayPhysicalArray, ani_object arrayObj, ani_env *env) { ani_double arrayObjLen; @@ -96,7 +96,7 @@ void DisplayAniUtils::convertDisplayPhysicalResolution(std::vector display, ani_env* env, ani_object obj) +ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_object obj) { sptr info = display->GetDisplayInfoWithCache(); int setfieldid = env->Object_SetFieldByName_Double(obj, "id", info->GetDisplayId()); @@ -126,8 +126,7 @@ ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Double(obj, "availableWidth", info->GetAvailableWidth()); env->Object_SetFieldByName_Double(obj, "availableHeight", info->GetAvailableHeight()); env->Object_SetFieldByName_Double(obj, "densityDPI", info->GetVirtualPixelRatio() * DOT_PER_INCH); - env->Object_SetFieldByName_Int(obj, "orientation_", - static_cast(info->GetDisplayOrientation())); + env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetDisplayOrientation())); env->Object_SetFieldByName_Double(obj, "densityPixels", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "scaledDensity", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "xDPI", info->GetXDpi()); @@ -138,18 +137,12 @@ ani_status DisplayAniUtils::cvtDisplay(sptr display, ani_env* env, ani_ if (colorSpaces.size() != 0) { ani_array_int colorSpacesAni; CreateAniArrayInt(env, colorSpaces.size(), &colorSpacesAni, colorSpaces); - if (ANI_OK != env->Object_SetFieldByName_Ref(obj, "colorSpaces", - static_cast(colorSpacesAni))) { - TLOGE(WmsLogTag::DMS, "[ANI] Array set colorSpaces field error"); - } + env->Object_SetFieldByName_Ref(obj, "colorSpaces", static_cast(colorSpacesAni)); } if (hdrFormats.size() != 0) { ani_array_int hdrFormatsAni; CreateAniArrayInt(env, hdrFormats.size(), &hdrFormatsAni, hdrFormats); - if (ANI_OK != env->Object_SetFieldByName_Ref(obj, "hdrFormats", - static_cast(hdrFormatsAni))) { - TLOGE(WmsLogTag::DMS, "[ANI] Array set hdrFormats field error"); - } + env->Object_SetFieldByName_Ref(obj, "hdrFormats", static_cast(hdrFormatsAni)); } return ANI_OK; } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index e9eab12b33..d6b050eab3 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -182,7 +182,7 @@ class ScreenImpl implements Screen { setDensityDpi(densityDpi: number, callback: AsyncCallback): void { taskpool.execute((): void => { - this.setDensityDpiInternal(number); + this.setDensityDpiInternal(densityDpi); }).then(() => { callback(new BusinessError(), undefined); }).catch((err: NullishType) => { @@ -193,7 +193,7 @@ class ScreenImpl implements Screen { setDensityDpi(densityDpi: number): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { taskpool.execute((): void => { - this.setDensityDpiInternal(number); + this.setDensityDpiInternal(densityDpi); }).then(() => { resolve(undefined); }).catch((err: NullishType) => { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h index f462512cd8..61fca6915c 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h @@ -29,18 +29,18 @@ namespace Rosen { class ScreenManagerAni { public: explicit ScreenManagerAni(); - static void registerCallback(ani_env* env, ani_string type, + static void RegisterCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj); - static void unRegisterCallback(ani_env* env, ani_string type, + static void UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback); - static ani_status initScreenManagerAni(ani_namespace screenNameSpace, ani_env* env); - DmErrorCode processRegisterCallback(ani_env* env, std::string& typeStr, + static ani_status InitScreenManagerAni(ani_namespace screenNameSpace, ani_env* env); + DmErrorCode ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr screenAniListener); - static ani_double makeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen); - static void getAllScreens(ani_env* env, ani_object screensAni); + static ani_double MakeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen); + static void GetAllScreens(ani_env* env, ani_object screensAni); private: - void onRegisterCallback(ani_env* env, ani_string type, ani_ref callback); - void onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); + void OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); + void OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); DMError UnRegisterScreenListenerWithType(std::string type, ani_env* env, ani_ref callback); DMError UnRegisterAllScreenListenerWithType(std::string type); std::mutex mtx_; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index cdbfcf0b3e..dd27c5d767 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -34,31 +34,31 @@ ScreenManagerAni::ScreenManagerAni() { } -void ScreenManagerAni::registerCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj) +void ScreenManagerAni::RegisterCallback(ani_env* env, ani_string type, ani_ref callback, ani_long nativeObj) { TLOGI(WmsLogTag::DMS, "[ANI] start to register screen callback: %{public}ld", (long)nativeObj); ScreenManagerAni* screenManagerAni = reinterpret_cast(nativeObj); if (screenManagerAni != nullptr) { - screenManagerAni->onRegisterCallback(env, type, callback); + screenManagerAni->OnRegisterCallback(env, type, callback); } else { TLOGE(WmsLogTag::DMS, "[ANI] screenManagerAni null ptr"); } } -void ScreenManagerAni::unRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback) +void ScreenManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] unRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterCallback begin"); ScreenManagerAni* screenManagerAni = reinterpret_cast(nativeObj); if (screenManagerAni != nullptr) { - screenManagerAni->onUnRegisterCallback(env, type, callback); + screenManagerAni->OnUnRegisterCallback(env, type, callback); } else { TLOGI(WmsLogTag::DMS, "[ANI] null ptr"); } } -void ScreenManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_ref callback) +void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] onRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback begin"); std::lock_guard lock(mtx_); std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); @@ -85,7 +85,7 @@ void ScreenManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_ref return; } screenAniListener->AddCallback(typeString, cbRef); - ret = processRegisterCallback(env, typeString, screenAniListener); + ret = ProcessRegisterCallback(env, typeString, screenAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register screen listener with type, errcode: %{public}d", ret); std::string errMsg = "Failed to register screen listener with type"; @@ -96,21 +96,21 @@ void ScreenManagerAni::onRegisterCallback(ani_env* env, ani_string type, ani_ref jsCbMap_[typeString][callback] = screenAniListener; } -DmErrorCode ScreenManagerAni::processRegisterCallback(ani_env* env, std::string& typeStr, +DmErrorCode ScreenManagerAni::ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr screenAniListener) { DmErrorCode ret = DmErrorCode::DM_ERROR_INVALID_PARAM; if (typeStr == EVENT_CHANGE || typeStr == EVENT_CONNECT || typeStr == EVENT_DISCONNECT) { - TLOGI(WmsLogTag::DMS, "processRegisterCallback %{public}s", typeStr.c_str()); + TLOGI(WmsLogTag::DMS, "ProcessRegisterCallback %{public}s", typeStr.c_str()); ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterScreenListener(screenAniListener)); } return ret; } -void ScreenManagerAni::onUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) +void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback begin"); std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); @@ -118,10 +118,10 @@ void ScreenManagerAni::onUnRegisterCallback(ani_env* env, ani_string type, ani_r env->Reference_IsUndefined(callback, &callbackNull); DmErrorCode ret; if (callbackNull) { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback for all"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterAllScreenListenerWithType(typeString)); } else { - TLOGI(WmsLogTag::DMS, "[ANI] onUnRegisterCallback with type"); + TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback with type"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterScreenListenerWithType(typeString, env, callback)); } @@ -179,7 +179,7 @@ DMError ScreenManagerAni::UnRegisterAllScreenListenerWithType(std::string type) return ret; } -ani_double ScreenManagerAni::makeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen) +ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen) { ani_double length = 0; std::vector screenIds; @@ -204,7 +204,7 @@ ani_double ScreenManagerAni::makeMirror(ani_env* env, ani_double mainScreen, ani return static_cast(screenGroupId); } -ani_status ScreenManagerAni::initScreenManagerAni(ani_namespace screenNameSpace, ani_env* env) +ani_status ScreenManagerAni::InitScreenManagerAni(ani_namespace screenNameSpace, ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_function setObjFunc = nullptr; @@ -222,10 +222,10 @@ ani_status ScreenManagerAni::initScreenManagerAni(ani_namespace screenNameSpace, return ret; } -void ScreenManagerAni::getAllScreens(ani_env* env, ani_object screensAni) +void ScreenManagerAni::GetAllScreens(ani_env* env, ani_object screensAni) { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "JsScreenManager::OnGetAllScreens"); - TLOGI(WmsLogTag::DMS, "[ANI] getAllScreens start"); + TLOGI(WmsLogTag::DMS, "[ANI] GetAllScreens start"); std::vector> screens; auto res = DM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get().GetAllScreens(screens)); if (res != DmErrorCode::DM_OK) { @@ -260,16 +260,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } - ScreenManagerAni::initScreenManagerAni(nsp, env); + ScreenManagerAni::InitScreenManagerAni(nsp, env); std::array funcs = { ani_native_function {"syncOn", nullptr, - reinterpret_cast(ScreenManagerAni::registerCallback)}, + reinterpret_cast(ScreenManagerAni::RegisterCallback)}, ani_native_function {"syncOff", nullptr, - reinterpret_cast(ScreenManagerAni::unRegisterCallback)}, + reinterpret_cast(ScreenManagerAni::UnRegisterCallback)}, ani_native_function {"makeMirrorInternal", nullptr, - reinterpret_cast(ScreenManagerAni::makeMirror)}, + reinterpret_cast(ScreenManagerAni::MakeMirror)}, ani_native_function {"getAllScreensInternal", nullptr, - reinterpret_cast(ScreenManagerAni::getAllScreens)} + reinterpret_cast(ScreenManagerAni::GetAllScreens)} }; if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); -- Gitee From 184989cf546523bc7d9fadc3a0c97930d77a6a74 Mon Sep 17 00:00:00 2001 From: tanliang Date: Mon, 14 Jul 2025 16:20:43 +0800 Subject: [PATCH 013/109] =?UTF-8?q?number=E6=94=B9int?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tanliang --- .../window_stage_ani/ets/@ohos.window.ets | 14 +++++++------- .../window_stage_ani/src/ani_window_manager.cpp | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index b61b76d5ea..62e253311e 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1211,19 +1211,19 @@ export interface Configuration { /** * Indicates Parent window id * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @since 9 */ /** * Indicates Parent window id * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @atomicservice * @since 12 */ - parentId?: number; + parentId?: int; /** * Indicates whether enable window decor, only support dialog, The default value is false. @@ -1251,7 +1251,7 @@ export class ConfigurationInternal implements Configuration { windowType: WindowType; ctx?: BaseContext; displayId?: number; - parentId?: number; + parentId?: int; decorEnabled?: boolean; title?: string; } @@ -2945,7 +2945,7 @@ export function setNativeObj(nativeObject: long):void { native function getWindowsByCoordinate(nativeObj: long, param: window.GetWindowsByCoordinateParam): Array; native function getLastWindowSync(nativeObj: long, ctx: BaseContext): Window; -native function minimizeAllSync(nativeObj: long, id: number): void; +native function minimizeAllSync(nativeObj: long, id: int): void; native function findWindowSync(nativeObj: long, name: string): Window; native function onSync(nativeObj: long, type: string, callback: object): void; native function offSync(nativeObj: long, type: string, callback?: object): void; @@ -2998,7 +2998,7 @@ export function createWindow(config: Configuration, callback: AsyncCallback { +export function minimizeAll(id: int): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { minimizeAllSync(nativeObj, id); @@ -3010,7 +3010,7 @@ export function minimizeAll(id: number): Promise { }); } -export function minimizeAll(id: number, callback: AsyncCallback): void { +export function minimizeAll(id: int, callback: AsyncCallback): void { taskpool.execute((): void => { minimizeAllSync(nativeObj, id); }).then((ret: NullishType) => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 19e825f93a..910faad80a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -65,7 +65,7 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) ani_native_function {"findWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", reinterpret_cast(AniWindowManager::FindWindow)}, - ani_native_function {"minimizeAllSync", "JD:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, + ani_native_function {"minimizeAllSync", "JI:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, ani_native_function {"shiftAppWindowFocusSync", "JDD:V", reinterpret_cast(AniWindowManager::ShiftAppWindowFocus)}, ani_native_function {"onSync", nullptr, -- Gitee From 9ec29ca457c68ce59e2aa57b1c7d624309771f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=87=AF?= Date: Mon, 14 Jul 2025 11:56:45 +0000 Subject: [PATCH 014/109] number trans to int MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张凯 Change-Id: Icd445ca1fe12fb643092b9d69b02ba43ee739bc3 --- .../window_stage_ani/ets/@ohos.window.ets | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 62e253311e..53862b126c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1956,12 +1956,12 @@ export class WindowInternal implements Window { private native setSpecificSystemBarEnabled(nativeObj: long, name: String, enable: boolean, enableAnimation: boolean): int; private native snapshot(nativeObj: long): image.PixelMap; private native hideNonSystemFloatingWindows(nativeObj: long, shouldHide: boolean): void; - private native opacity(nativeObj: long, opacity: number): void; + private native opacity(nativeObj: long, opacity: double): void; private native scale(nativeObj: long, scaleOptions: ScaleOptions): void; private native translate(nativeObj: long, translateOptions: TranslateOptions): void; private native rotate(nativeObj: long, rotateOptions: RotateOptions): void; - private native setShadow(nativeObj: long, radius: number, color?: string, - offsetX?: number, offsetY?: number): void; + private native setShadow(nativeObj: long, radius: double, color?: string, + offsetX?: double, offsetY?: double): void; private native setWindowColorSpaceSync(nativeObj: long, colorSpace: int): void; private native setPreferredOrientationSync(nativeObj: long, orientation: int): void; @@ -2712,7 +2712,7 @@ export class WindowInternal implements Window { }); } - public opacity(opacity: number): void { + public opacity(opacity: double): void { this.opacity(this.nativeObj, opacity); } @@ -2728,7 +2728,7 @@ export class WindowInternal implements Window { this.rotate(this.nativeObj, rotateOptions); } - public setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void { + public setShadow(radius: double, color?: string, offsetX?: double, offsetY?: double): void { this.setShadow(this.nativeObj, radius, color, offsetX, offsetY); } @@ -2923,11 +2923,11 @@ export interface Window { keepKeyboardOnFocus(enable: boolean): void; setWindowTouchable(isTouchable: boolean): Promise setWindowTouchable(isTouchable: boolean, callback: AsyncCallback): void - opacity(opacity: number): void; + opacity(opacity: double): void; scale(scaleOptions: ScaleOptions): void; translate(translateOptions: TranslateOptions): void; rotate(rotateOptions: RotateOptions): void; - setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void; + setShadow(radius: double, color?: string, offsetX?: double, offsetY?: double): void; on(type: string, callback: Callback): void; on(type: 'noInteractionDetected', timeout: number, callback: Callback): void; off(type: string, callback?: Callback): void; -- Gitee From f318ad0989e0ca162bbb3478528a3a6008ca490f Mon Sep 17 00:00:00 2001 From: chenpeng Date: Mon, 14 Jul 2025 15:32:02 +0800 Subject: [PATCH 015/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/ets/@ohos.display.ets | 18 ++--- .../display_ani/src/display_ani.cpp | 29 +++++-- .../display_ani/src/display_ani_listener.cpp | 77 ++++++++++--------- .../display_ani/src/display_ani_manager.cpp | 22 +++--- .../screen_ani/src/screen_ani_listener.cpp | 6 +- .../screen_ani/src/screen_ani_manager.cpp | 14 ++-- .../screen_ani/src/screen_ani_utils.cpp | 2 +- .../src/screenshot_ani_utils.cpp | 2 +- 8 files changed, 91 insertions(+), 79 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index f9eee9b2cf..7b62fbe64a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -114,7 +114,6 @@ export class FoldCreaseRegionImpl implements FoldCreaseRegion { } export enum FoldDisplayMode { - FOLD_DISPLAY_MODE_UNKNOWN = 0, FOLD_DISPLAY_MODE_FULL, @@ -127,7 +126,6 @@ export enum FoldDisplayMode { } export enum Orientation { - PORTRAIT = 0, LANDSCAPE = 1, @@ -148,7 +146,6 @@ export enum FoldStatus { } enum DisplayState { - STATE_UNKNOWN = 0, STATE_OFF, @@ -212,6 +209,7 @@ export interface Display { hasImmersiveWindow(): Promise; on(type: string, callback: Callback): void; + off(type: string, callback?: Callback): void; } @@ -334,13 +332,13 @@ export class DisplayImpl implements Display { on(type: string, callback: Callback): void { this.syncOn(type, callback as object); } + off(type: string, callback?: Callback): void { this.syncOff(type, callback as object); } native syncOn(type: string, callback: object): void; native syncOff(type: string, callback?: object): void; - native getAvailableAreaInternal(rect: Rect): void; native getCutoutInfoInternal(cutoutInfo: CutoutInfo): void; native hasImmersiveWindowInternal(): boolean; @@ -534,21 +532,20 @@ export function getAllDisplayPhysicalResolution(): Promise): void { - let i = 0; - for (; i < resolutions.length; i++) { - if (resolutions[i].physicalWidth == 0) { + let index = 0; + for (; index < resolutions.length; index++) { + if (resolutions[index].physicalWidth == 0) { break; } - let resolution = resolutions[i] as DisplayPhysicalResolutionImpl; + let resolution = resolutions[index] as DisplayPhysicalResolutionImpl; resolution.foldDisplayMode = resolution.foldDisplayMode_ as FoldDisplayMode; } - resolutions.splice(i); + resolutions.splice(index); } export native function getAllDisplayPhysicalResolutionNative(PhysicalResolutions: Array, nativeObj: long): void; export interface DisplayPhysicalResolution { - foldDisplayMode: FoldDisplayMode; physicalWidth: number; @@ -557,7 +554,6 @@ export interface DisplayPhysicalResolution { } export class DisplayPhysicalResolutionImpl implements DisplayPhysicalResolution{ - foldDisplayMode: FoldDisplayMode; foldDisplayMode_: int; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 16eabb6992..587e58bb38 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -38,7 +38,7 @@ DisplayAni::DisplayAni(const sptr& display) : display_(display) void DisplayAni::GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutInfoObj) { auto display = SingletonContainer::Get().GetDefaultDisplay(); - TLOGI(WmsLogTag::DMS, "[ANI] GetCutoutInfo begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); sptr cutoutInfo = display->GetCutoutInfo(); if (cutoutInfo == nullptr) { AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); @@ -77,6 +77,7 @@ void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object avail env->Object_GetFieldByName_Double(obj, "id", &id); auto display = SingletonContainer::Get().GetDisplayById(id); if (display == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] can not find display."); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, "JsDisplay::GetAvailableArea failed, can not find display."); return; @@ -84,6 +85,7 @@ void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object avail DMRect area; DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(display->GetAvailableArea(area)); if (ret != DmErrorCode::DM_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] Display get available area failed."); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, "JsDisplay::GetAvailableArea failed."); return; @@ -98,13 +100,15 @@ ani_boolean DisplayAni::HasImmersiveWindow(ani_env* env, ani_object obj) env->Object_GetFieldByName_Double(obj, "id", &id); auto display = SingletonContainer::Get().GetDisplayById(id); if (display == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI]can not find display."); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, - "JsDisplay::HasImmersiveWindow failed, can not find display."); + "can not find display."); return false; } bool immersive = false; DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(display->HasImmersiveWindow(immersive)); if (ret != DmErrorCode::DM_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get display has immersive window failed."); AniErrUtils::ThrowBusinessError(env, ret, "JsDisplay::HasImmersiveWindow failed."); return false; } @@ -170,7 +174,7 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ std::lock_guard lock(mtx_); if (typeString == EVENT_AVAILABLE_AREA_CHANGED) { auto displayId = display_->GetId(); - TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback availableAreaChange begin"); + TLOGI(WmsLogTag::DMS, "[ANI] availableAreaChange begin"); ret = SingletonContainer::Get().RegisterAvailableAreaListener(displayAniListener, displayId); } else { ret = DMError::DM_ERROR_INVALID_PARAM; @@ -183,7 +187,10 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ return; } ani_ref cbRef{}; - env->GlobalReference_Create(callback, &cbRef); + if (ANI_OK != env->GlobalReference_Create(callback, &cbRef)) { + TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); + return; + } displayAniListener->AddCallback(typeString, cbRef); jsCbMap_[typeString][callback] = displayAniListener; } @@ -210,10 +217,10 @@ void DisplayAni::OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string t env->Reference_IsUndefined(callback, &callbackNull); DmErrorCode ret; if (callbackNull) { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); + TLOGI(WmsLogTag::DMS, "[ANI] for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); } else { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback with type"); + TLOGI(WmsLogTag::DMS, "[ANI] with type"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterDisplayListenerWithType(typeString, env, callback)); } @@ -229,12 +236,16 @@ DMError DisplayAni::UnregisterAllDisplayListenerWithType(std::string type) TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { - TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType methodName %{public}s not registered!", + TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); return DMError::DM_OK; } DMError ret = DMError::DM_OK; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { + if (it->second == nullptr) { + TLOGE(WmsLogTag::DMS, "listener is null"); + continue; + } it->second->RemoveAllCallback(); if (type == EVENT_AVAILABLE_AREA_CHANGED) { auto displayId = display_->GetId(); @@ -262,6 +273,10 @@ DMError DisplayAni::UnregisterDisplayListenerWithType(std::string type, ani_env* ani_boolean isEquals = 0; env->Reference_StrictEquals(callback, it->first, &isEquals); if (isEquals) { + if (it->second == nullptr) { + TLOGE(WmsLogTag::DMS, "listener is null"); + continue; + } it->second->RemoveCallback(env, type, callback); if (type == EVENT_AVAILABLE_AREA_CHANGED) { TLOGI(WmsLogTag::DMS, "[ANI] start to unregis display event listener! event = %{public}s", diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index c95bf10d7e..611e534b7b 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -82,7 +82,7 @@ void DisplayAniListener::RemoveAllCallback() void DisplayAniListener::OnCreate(DisplayId id) { - TLOGI(WmsLogTag::DMS, "[ANI] OnCreate begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); @@ -130,7 +130,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) } void DisplayAniListener::OnChange(DisplayId id) { - TLOGI(WmsLogTag::DMS, "[ANI] OnChange begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); @@ -175,7 +175,7 @@ void DisplayAniListener::OnChange(DisplayId id) } void DisplayAniListener::OnPrivateWindow(bool hasPrivate) { - TLOGI(WmsLogTag::DMS, "[ANI] OnPrivateWindow is called, hasPrivate: %{public}u", + TLOGI(WmsLogTag::DMS, "[ANI] called, hasPrivate: %{public}u", static_cast(hasPrivate)); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { @@ -191,27 +191,28 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not this event, return"); return; } - if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE); - for (auto oneAniCallback : it->second) { - auto task = [env = env_, oneAniCallback, hasPrivate] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", - nullptr, oneAniCallback, hasPrivate); - }; - if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); - return; - } - eventHandler_->PostTask(task, "dms:AniDisplayListener::PrivateWindowCallback", 0, - AppExecFwk::EventQueue::Priority::IMMEDIATE); - } - } else { + if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow: env is nullptr"); + return; + } + + auto it = aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE); + for (auto oneAniCallback : it->second) { + auto task = [env = env_, oneAniCallback, hasPrivate] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", + nullptr, oneAniCallback, hasPrivate); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::PrivateWindowCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); } } void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) { - TLOGI(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged is called, foldStatus: %{public}u", + TLOGI(WmsLogTag::DMS, "[ANI] called, foldStatus: %{public}u", static_cast(foldStatus)); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { @@ -227,27 +228,27 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) TLOGE(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged not this event, return"); return; } - if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_FOLD_STATUS_CHANGED); - for (auto oneAniCallback : it->second) { - auto task = [env = env_, oneAniCallback, foldStatus] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldStatusCallback", - nullptr, oneAniCallback, static_cast(foldStatus)); - }; - if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); - return; - } - eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldStatusChangedCallback", 0, - AppExecFwk::EventQueue::Priority::IMMEDIATE); - } - } else { + if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] OnCreate: env is nullptr"); + return; + } + auto it = aniCallBack_.find(EVENT_FOLD_STATUS_CHANGED); + for (auto oneAniCallback : it->second) { + auto task = [env = env_, oneAniCallback, foldStatus] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldStatusCallback", + nullptr, oneAniCallback, static_cast(foldStatus)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldStatusChangedCallback", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); } } void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) { - TLOGI(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged is called"); + TLOGI(WmsLogTag::DMS, "[ANI] called"); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); @@ -284,7 +285,7 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) } void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) { - TLOGI(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged is called"); + TLOGI(WmsLogTag::DMS, "[ANI] called"); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); @@ -319,7 +320,7 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) } void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) { - TLOGI(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged is called, foldDisplayMode: %{public}u", + TLOGI(WmsLogTag::DMS, "[ANI] called, foldDisplayMode: %{public}u", static_cast(foldDisplayMode)); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { @@ -355,7 +356,7 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) } void DisplayAniListener::OnAvailableAreaChanged(DMRect area) { - TLOGI(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged is called"); + TLOGI(WmsLogTag::DMS, "[ANI] called"); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index d02ad621bb..160affb2b2 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -94,7 +94,7 @@ void DisplayManagerAni::GetCurrentFoldCreaseRegion(ani_env* env, ani_object obj, void DisplayManagerAni::OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj) { - TLOGI(WmsLogTag::DMS, "[ANI] GetCurrentFoldCreaseRegion begin instance"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); sptr region = SingletonContainer::Get().GetCurrentFoldCreaseRegion(); if (region == nullptr) { return; @@ -131,7 +131,7 @@ void DisplayManagerAni::OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object ob void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) { - TLOGI(WmsLogTag::DMS, "[ANI] GetAllDisplaysAni start"); + TLOGI(WmsLogTag::DMS, "[ANI] start"); std::vector> displays = SingletonContainer::Get().GetAllDisplays(); if (displays.empty()) { AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); @@ -156,7 +156,7 @@ void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId) { - TLOGE(WmsLogTag::DMS, "[ANI] GetDisplayByIdSyncAni begin"); + TLOGE(WmsLogTag::DMS, "[ANI] begin"); if (displayId < 0) { TLOGE(WmsLogTag::DMS, "[ANI] Invalid displayId, less than 0"); return; @@ -199,7 +199,7 @@ void DisplayManagerAni::RegisterCallback(ani_env* env, ani_string type, void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); @@ -272,7 +272,7 @@ DmErrorCode DisplayManagerAni::ProcessRegisterCallback(ani_env* env, std::string void DisplayManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); if (displayManagerAni != nullptr) { displayManagerAni->OnUnRegisterCallback(env, type, callback); @@ -283,7 +283,7 @@ void DisplayManagerAni::UnRegisterCallback(ani_env* env, ani_string type, void DisplayManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); @@ -311,7 +311,7 @@ void DisplayManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ DMError DisplayManagerAni::UnRegisterDisplayListenerWithType(std::string type, ani_env* env, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListenerWithType begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); return DMError::DM_OK; @@ -358,7 +358,7 @@ DMError DisplayManagerAni::UnRegisterDisplayListenerWithType(std::string type, a DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type) { - TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType methodName %{public}s not registered!", type.c_str()); @@ -398,7 +398,7 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_double displayId) { - TLOGI(WmsLogTag::DMS, "[ANI] DMS HasPrivateWindow begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); bool hasPrivateWindow = false; if (displayId < 0) { std::string errMsg = "Invalid args count, need one arg"; @@ -417,14 +417,14 @@ ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_double display void DisplayManagerAni::GetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj, ani_long nativeObj) { - TLOGI(WmsLogTag::DMS, "[ANI] DMS GetAllDisplayPhysicalResolution begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); DisplayManagerAni* displayManagerAni = reinterpret_cast(nativeObj); displayManagerAni->OnGetAllDisplayPhysicalResolution(env, arrayObj); } void DisplayManagerAni::OnGetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj) { - TLOGI(WmsLogTag::DMS, "[ANI] DMS OnGetAllDisplayPhysicalResolution begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::vector displayPhysicalArray = SingletonContainer::Get().GetAllDisplayPhysicalResolution(); if (displayPhysicalArray.empty()) { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index f308a0f3a4..663522ac55 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -69,7 +69,7 @@ void ScreenAniListener::RemoveCallback(ani_env* env, const std::string& type, an } void ScreenAniListener::OnConnect(ScreenId id) { - TLOGI(WmsLogTag::DMS, "[ANI] OnConnect begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { @@ -114,7 +114,7 @@ void ScreenAniListener::OnConnect(ScreenId id) } void ScreenAniListener::OnDisconnect(ScreenId id) { - TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { @@ -161,7 +161,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) // need to implement void ScreenAniListener::OnChange(ScreenId id) { - TLOGI(WmsLogTag::DMS, "[ANI] OnChange begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index dd27c5d767..a002163c95 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -47,7 +47,7 @@ void ScreenManagerAni::RegisterCallback(ani_env* env, ani_string type, ani_ref c void ScreenManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_long nativeObj, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ScreenManagerAni* screenManagerAni = reinterpret_cast(nativeObj); if (screenManagerAni != nullptr) { screenManagerAni->OnUnRegisterCallback(env, type, callback); @@ -58,7 +58,7 @@ void ScreenManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_lon void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] OnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::lock_guard lock(mtx_); std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); @@ -110,7 +110,7 @@ DmErrorCode ScreenManagerAni::ProcessRegisterCallback(ani_env* env, std::string& void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); @@ -138,7 +138,7 @@ void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_r DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani_env* env, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterScreenListenerWithType begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); return DMError::DM_OK; @@ -162,7 +162,7 @@ DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani DMError ScreenManagerAni::UnRegisterAllScreenListenerWithType(std::string type) { - TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllScreenListenerWithType begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllScreenListenerWithType methodName %{public}s not registered!", type.c_str()); @@ -206,7 +206,7 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani ani_status ScreenManagerAni::InitScreenManagerAni(ani_namespace screenNameSpace, ani_env* env) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::DEFAULT, "[ANI] begin"); ani_function setObjFunc = nullptr; ani_status ret = env->Namespace_FindFunction(screenNameSpace, "setScreenMgrRef", "J:V", &setObjFunc); if (ret != ANI_OK) { @@ -225,7 +225,7 @@ ani_status ScreenManagerAni::InitScreenManagerAni(ani_namespace screenNameSpace, void ScreenManagerAni::GetAllScreens(ani_env* env, ani_object screensAni) { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "JsScreenManager::OnGetAllScreens"); - TLOGI(WmsLogTag::DMS, "[ANI] GetAllScreens start"); + TLOGI(WmsLogTag::DMS, "[ANI] start"); std::vector> screens; auto res = DM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get().GetAllScreens(screens)); if (res != DmErrorCode::DM_OK) { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index 4279e39d37..30e7d0aa27 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -158,7 +158,7 @@ ani_status ScreenAniUtils::ConvertScreens(ani_env *env, std::vector ani_status ScreenAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin"); + TLOGI(WmsLogTag::DEFAULT, "[ANI] begin"); ani_status ret = ANI_OK; ani_namespace aniNamespace{}; if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp index a129359125..a39e328729 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -62,7 +62,7 @@ void ScreenshotAniUtils::ConvertScreenshot(ani_env *env, std::shared_ptrFindNamespace(ns, &aniNamespace)) != ANI_OK) { -- Gitee From e1e6b7802d3ec9b8f64e3e4538533714ac597eb1 Mon Sep 17 00:00:00 2001 From: tanliang Date: Thu, 17 Jul 2025 18:50:06 +0800 Subject: [PATCH 016/109] =?UTF-8?q?displayId=E7=B1=BB=E5=9E=8B=E6=94=B9?= =?UTF-8?q?=E4=B8=BAlong?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tanliang --- .../window_runtime/window_stage_ani/ets/@ohos.window.ets | 6 +++--- .../window_stage_ani/include/ani_window_manager.h | 4 ++-- .../ani/window_runtime/window_stage_ani/src/ani_window.cpp | 2 +- .../window_stage_ani/src/ani_window_manager.cpp | 6 +++--- .../window_stage_ani/src/ani_window_stage.cpp | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 62e253311e..c2eabec758 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2945,7 +2945,7 @@ export function setNativeObj(nativeObject: long):void { native function getWindowsByCoordinate(nativeObj: long, param: window.GetWindowsByCoordinateParam): Array; native function getLastWindowSync(nativeObj: long, ctx: BaseContext): Window; -native function minimizeAllSync(nativeObj: long, id: int): void; +native function minimizeAllSync(nativeObj: long, id: long): void; native function findWindowSync(nativeObj: long, name: string): Window; native function onSync(nativeObj: long, type: string, callback: object): void; native function offSync(nativeObj: long, type: string, callback?: object): void; @@ -2998,7 +2998,7 @@ export function createWindow(config: Configuration, callback: AsyncCallback { +export function minimizeAll(id: long): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { minimizeAllSync(nativeObj, id); @@ -3010,7 +3010,7 @@ export function minimizeAll(id: int): Promise { }); } -export function minimizeAll(id: int, callback: AsyncCallback): void { +export function minimizeAll(id: long, callback: AsyncCallback): void { taskpool.execute((): void => { minimizeAllSync(nativeObj, id); }).then((ret: NullishType) => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h index b2a255612a..47c270f1e0 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h @@ -38,7 +38,7 @@ public: static ani_ref GetLastWindow(ani_env* env, ani_long nativeObj, ani_object context); static ani_ref FindWindow(ani_env* env, ani_long nativeObj, ani_string windowName); static ani_ref CreateWindow(ani_env* env, ani_long nativeObj, ani_object configuration); - static void MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId); + static void MinimizeAll(ani_env* env, ani_long nativeObj, ani_long displayId); static void RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, @@ -48,7 +48,7 @@ private: ani_ref OnGetLastWindow(ani_env* env, ani_object context); ani_ref OnFindWindow(ani_env* env, ani_string windowName); ani_ref OnCreateWindow(ani_env* env, ani_object configuration); - void OnMinimizeAll(ani_env* env, ani_double displayId); + void OnMinimizeAll(ani_env* env, ani_long displayId); void OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId); ani_object GetTopWindowTask(ani_env* env, void* contextPtr, bool newApi); void OnRegisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 53b4d053f9..bde798b21f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -2708,7 +2708,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"setUIContentSync", "JLstd/core/String;:V", reinterpret_cast(AniWindow::SetUIContent)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", + "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", reinterpret_cast(AniWindow::LoadContent)}, ani_native_function {"setWindowKeepScreenOnSync", "JZ:V", reinterpret_cast(AniWindow::SetWindowKeepScreenOn)}, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 910faad80a..0504d30eeb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -65,7 +65,7 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) ani_native_function {"findWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", reinterpret_cast(AniWindowManager::FindWindow)}, - ani_native_function {"minimizeAllSync", "JI:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, + ani_native_function {"minimizeAllSync", "JJ:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, ani_native_function {"shiftAppWindowFocusSync", "JDD:V", reinterpret_cast(AniWindowManager::ShiftAppWindowFocus)}, ani_native_function {"onSync", nullptr, @@ -349,7 +349,7 @@ ani_ref AniWindowManager::OnCreateWindow(ani_env* env, ani_object configuration) } } -void AniWindowManager::MinimizeAll(ani_env* env, ani_long nativeObj, ani_double displayId) +void AniWindowManager::MinimizeAll(ani_env* env, ani_long nativeObj, ani_long displayId) { TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); @@ -360,7 +360,7 @@ void AniWindowManager::MinimizeAll(ani_env* env, ani_long nativeObj, ani_double } } -void AniWindowManager::OnMinimizeAll(ani_env* env, ani_double displayId) +void AniWindowManager::OnMinimizeAll(ani_env* env, ani_long displayId) { TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); if (static_cast(displayId) < 0 || diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index d05d70b9ce..3192528053 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -504,7 +504,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"removeStartingWindow", "J:V", reinterpret_cast(RemoveStartingWindow)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storages/localStorage/LocalStorage;:V", + "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", reinterpret_cast(AniWindowStage::LoadContent)}, ani_native_function {"disableWindowDecorSync", nullptr, reinterpret_cast(AniWindowStage::DisableWindowDecor)}, -- Gitee From 4757f65e7a7bdfb7eadc7132682d15301d17e248 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Mon, 21 Jul 2025 16:45:14 +0800 Subject: [PATCH 017/109] =?UTF-8?q?save=E6=8E=A5=E5=8F=A3bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D:=E5=88=9B=E5=BB=BA=E5=BC=82=E6=AD=A5=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=A3=B0=E6=98=8E=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../screenshot_ani/ets/@ohos.screenshot.ets | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets index e934fd7b89..f02a846493 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -22,7 +22,7 @@ export default namespace screenshot { loadLibrary('screenshotani_kit.z'); export function save(options: ScreenshotOptions, callback: AsyncCallback): void { - taskpool.execute((options: ScreenshotOptions): image.PixelMap => { + taskpool.execute((): image.PixelMap => { let res: image.PixelMap = saveSync(options); return res; }).then((ret: NullishType) => { @@ -67,9 +67,9 @@ export interface ScreenshotOptions { displayId: number; - isNotificationNeeded: number; + isNotificationNeeded: boolean; - isCaptureFullOfScreen: number; + isCaptureFullOfScreen: boolean; } export class ScreenshotOptionsImpl implements ScreenshotOptions{ @@ -81,9 +81,9 @@ export class ScreenshotOptionsImpl implements ScreenshotOptions{ displayId: number; - isNotificationNeeded: number; + isNotificationNeeded: boolean; - isCaptureFullOfScreen: number; + isCaptureFullOfScreen: boolean; } export interface Size { -- Gitee From 7662686fd154da7593f55792323b7b1ac4b5301c Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Tue, 22 Jul 2025 10:59:10 +0800 Subject: [PATCH 018/109] fix shlib_type = "ani" Signed-off-by: chuanstudy --- .../kits/ani/embeddable_window_stage/BUILD.gn | 45 ++++++ .../ets/@ohos.uiExtensionHost.ets | 2 +- .../ets/uiExtensionHost_entry.ets | 2 +- .../src/ani_embeddable_window_stage.cpp | 25 +-- .../ani_embeddable_window_stage_module.cpp | 42 +++++ interfaces/kits/ani/screen_runtime/BUILD.gn | 1 + interfaces/kits/ani/window_runtime/BUILD.gn | 55 +++++++ .../window_stage_ani/ets/@ohos.window.ets | 4 +- .../window_stage_ani/ets/window_entry.ets | 2 +- .../window_stage_ani/src/ani_window.cpp | 2 +- .../window_stage_ani/src/ani_window_stage.cpp | 117 -------------- .../src/ani_window_stage_module.cpp | 148 ++++++++++++++++++ .../kits/ani/scene_session_manager/BUILD.gn | 1 + 13 files changed, 299 insertions(+), 147 deletions(-) create mode 100644 interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp create mode 100644 interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp diff --git a/interfaces/kits/ani/embeddable_window_stage/BUILD.gn b/interfaces/kits/ani/embeddable_window_stage/BUILD.gn index 39d4039f20..b549f887da 100644 --- a/interfaces/kits/ani/embeddable_window_stage/BUILD.gn +++ b/interfaces/kits/ani/embeddable_window_stage/BUILD.gn @@ -81,9 +81,54 @@ ohos_shared_library("embeddablewindowstageani_kit") { subsystem_name = "window" } +# lib generate +ohos_shared_library("embeddablewindowstageani_module") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + sources = [ + "src/ani_embeddable_window_stage_module.cpp", + ] + + configs = [ + ":window_common_config", + ":windowstage_ani_public_config", + "../../../../resources/config/build:coverage_flags", + ] + + public_configs = [ ":windowstage_ani_public_config" ] + + deps = [ + "../../../../utils:libwmutil", + "../../../../utils:libwmutil_base", + "../../../../wm:libwm", + ":embeddablewindowstageani_kit", + ] + + external_deps = [ + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "c_utils:utils", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hitrace:hitrace_meter", + "napi:ace_napi", + "runtime_core:ani", + ] + + innerapi_tags = [ "platformsdk" ] + part_name = "window_manager" + subsystem_name = "window" +} + group("embeddable_window_stage_ani") { deps = [ ":embeddablewindowstageani_kit", + ":embeddablewindowstageani_module", "ets:extension_window_abc_ani_etc", "ets:extension_window_host_abc_ani_etc", ] diff --git a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets index dadcbb29c6..f806ac009d 100644 --- a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets +++ b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets @@ -76,7 +76,7 @@ namespace uiExtensionHost { // API implementation export class UIExtensionHostInternal implements UIExtensionHostWindowProxy { - static { loadLibrary("embeddablewindowstageani_kit.z") } + static { loadLibrary("embeddablewindowstageani_module.z") } private nativeObj: long = 0; private setNativeObj(nativeObj: long): void { this.nativeObj = nativeObj; diff --git a/interfaces/kits/ani/embeddable_window_stage/ets/uiExtensionHost_entry.ets b/interfaces/kits/ani/embeddable_window_stage/ets/uiExtensionHost_entry.ets index 12b1de92f9..cea4b79096 100644 --- a/interfaces/kits/ani/embeddable_window_stage/ets/uiExtensionHost_entry.ets +++ b/interfaces/kits/ani/embeddable_window_stage/ets/uiExtensionHost_entry.ets @@ -2,7 +2,7 @@ import uiExtensionHost from '@ohos.uiExtensionHost'; import window from '@ohos.window'; function main() { - loadLibrary('embeddablewindowstageani_kit.z') + loadLibrary('embeddablewindowstageani_module.z') let win = uiExtensionHost.createExtentionWindow(0, 0); console.println('test uiExtensionHostWindowProxyRect'); diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp index f61e4a3135..471c47a921 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * 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 @@ -114,26 +114,3 @@ AniEmbeddableWindowStage* GetEmbeddableWindowStageFromEnv(ani_env* env, ani_clas } } // namespace Rosen } // namespace OHOS - -extern "C" { -ANI_EXPORT ani_status ExtensionWindow_ANI_Constructor(ani_vm *vm, uint32_t *result); -ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) -{ - using namespace OHOS::Rosen; - ani_status ret; - ani_env* env; - if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { - TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env"); - return ANI_NOT_FOUND; - } - - ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStage;", &cls)) != ANI_OK) { - TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); - return ANI_NOT_FOUND; - } - *result = ANI_VERSION_1; - - return ExtensionWindow_ANI_Constructor(vm, result); -} -} diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp new file mode 100644 index 0000000000..84fc95cd06 --- /dev/null +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021-2022 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_embeddable_window_stage.h" + +#include "ani.h" +#include "window_manager_hilog.h" + +extern "C" { +ANI_EXPORT ani_status ExtensionWindow_ANI_Constructor(ani_vm *vm, uint32_t *result); +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + using namespace OHOS::Rosen; + ani_status ret; + ani_env* env; + if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { + TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env"); + return ANI_NOT_FOUND; + } + + ani_class cls = nullptr; + if ((ret = env->FindClass("L@ohos/window/window/WindowStage;", &cls)) != ANI_OK) { + TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); + return ANI_NOT_FOUND; + } + *result = ANI_VERSION_1; + + return ExtensionWindow_ANI_Constructor(vm, result); +} +} diff --git a/interfaces/kits/ani/screen_runtime/BUILD.gn b/interfaces/kits/ani/screen_runtime/BUILD.gn index 8904533880..df3fb86ea9 100644 --- a/interfaces/kits/ani/screen_runtime/BUILD.gn +++ b/interfaces/kits/ani/screen_runtime/BUILD.gn @@ -35,6 +35,7 @@ config("screen_kit_public_config") { # lib generate ohos_shared_library("screenani_kit") { + shlib_type = "ani" branch_protector_ret = "pac_ret" sanitize = { cfi = true diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index 3b275ea3ce..1e22be5027 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -91,9 +91,64 @@ ohos_shared_library("windowstageani_kit") { subsystem_name = "window" } +# lib generate +ohos_shared_library("windowstageani_module") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + sources = [ + "window_stage_ani/src/ani_window_stage_module.cpp", + ] + + configs = [ + ":window_common_config", + ":windowstage_kit_public_config", + "../../../../resources/config/build:coverage_flags", + ] + + public_configs = [ ":windowstage_kit_public_config" ] + + deps = [ + "../../../../utils:libwmutil", + "../../../../utils:libwmutil_base", + "../../../../wm:libwm", + ":windowstageani_kit", + ] + + external_deps = [ + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:abilitykit_native", + "ability_runtime:runtime", + "access_token:libaccesstoken_sdk", + "ace_engine:ace_uicontent", + "bundle_framework:appexecfwk_base", + "c_utils:utils", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hitrace:hitrace_meter", + "image_framework:image", + "image_framework:image_ani", + "image_framework:image_native", + "ipc:ipc_napi", + "ipc:ipc_single", + "napi:ace_napi", + "runtime_core:ani", + ] + + innerapi_tags = [ "platformsdk" ] + part_name = "window_manager" + subsystem_name = "window" +} + group("window_stage_ani_pack") { deps = [ ":windowstageani_kit", + ":windowstageani_module", "window_stage_ani:window_stage_etc", ] } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c2eabec758..47482a85c6 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1720,7 +1720,7 @@ export class TranslateOptionsInternal implements TranslateOptions { } export class WindowStageInternal implements WindowStage { - static { loadLibrary('windowstageani_kit.z') } + static { loadLibrary('windowstageani_module.z') } private nativeObj: long = 0; setNativeObj(nativeObj: long):void { @@ -1907,7 +1907,7 @@ let windowDestroyRegister = new FinalizationRegistry(windowDestroyCallback export class WindowInternal implements Window { static readonly DEFAULT_RET_VAL = 1; - static { loadLibrary('windowstageani_kit.z') } + static { loadLibrary('windowstageani_module.z') } private nativeObj: long; public setNativeObj(nativeObject: long): void { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets index 01b5385677..57edc7ca21 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/window_entry.ets @@ -9,7 +9,7 @@ import { } from '@ohos.window'; function main() { - loadLibrary('windowstageani_kit.z') + loadLibrary('windowstageani_module.z') let ws = window.CreateWindowStage(0); let callback:AsyncCallbackVoid = (err) => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index bde798b21f..214138a139 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -950,7 +950,7 @@ __attribute__((no_sanitize("cfi"))) } ani_method setObjFunc = nullptr; if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI] get setNativeObj fail %{public}u", ret); return nullptr; } env->Object_CallMethod_Void(obj, setObjFunc, reinterpret_cast(aniWindow.get())); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 3192528053..c9b3f434d7 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -416,120 +416,3 @@ ani_ref AniWindowStage::OnCreateSubWindow(ani_env* env, ani_string name) } // namespace Rosen } // namespace OHOS -static void SetWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj, - ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag) -{ - using namespace OHOS::Rosen; - TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); - AniWindowStage* windowStage = reinterpret_cast(nativeObj); - if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { - TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return; - } - windowStage->SetWindowRectAutoSave(env, enabled, isSaveBySpecifiedFlag); -} - -static ani_boolean IsWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj) -{ - using namespace OHOS::Rosen; - TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); - AniWindowStage* windowStage = reinterpret_cast(nativeObj); - if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { - TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return ani_boolean(false); - } - return windowStage->IsWindowRectAutoSave(env); -} - -static void RemoveStartingWindow(ani_env* env, ani_object obj, ani_long nativeObj) -{ - using namespace OHOS::Rosen; - TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] start"); - AniWindowStage* windowStage = reinterpret_cast(nativeObj); - if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { - TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] windowStage is nullptr"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - return; - } - windowStage->RemoveStartingWindow(env); -} - -static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long nativeObj) -{ - using namespace OHOS::Rosen; - TLOGD(WmsLogTag::DEFAULT, "[ANI]"); - AniWindowStage* windowStage = reinterpret_cast(nativeObj); - if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { - TLOGD(WmsLogTag::DEFAULT, "[ANI] windowStage is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); - } - return windowStage->GetMainWindow(env); -} - -static ani_ref CreateSubWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_string name) -{ - using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); - AniWindowStage* windowStage = reinterpret_cast(nativeObj); - if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { - TLOGD(WmsLogTag::DEFAULT, "[ANI] windowStage is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); - } - return windowStage->OnCreateSubWindow(env, name); -} - -extern "C" { -ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) -{ - using namespace OHOS::Rosen; - ani_status ret; - ani_env* env; - if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] null env"); - return ANI_NOT_FOUND; - } - - ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] can't find class %{public}u", ret); - return ANI_NOT_FOUND; - } - std::array methods = { - ani_native_function {"setWindowRectAutoSave", "JZZ:V", - reinterpret_cast(SetWindowRectAutoSave)}, - ani_native_function {"isWindowRectAutoSave", "J:Z", - reinterpret_cast(IsWindowRectAutoSave)}, - ani_native_function {"removeStartingWindow", "J:V", - reinterpret_cast(RemoveStartingWindow)}, - ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", - reinterpret_cast(AniWindowStage::LoadContent)}, - ani_native_function {"disableWindowDecorSync", nullptr, - reinterpret_cast(AniWindowStage::DisableWindowDecor)}, - ani_native_function {"setShowOnLockScreenSync", - nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, - ani_native_function {"getMainWindowSync", "J:L@ohos/window/window/Window;", - reinterpret_cast(WindowGetMainWindow)}, - ani_native_function {"createSubWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", - reinterpret_cast(CreateSubWindow)}, - ani_native_function {"onSync", nullptr, - reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, - ani_native_function {"offSync", nullptr, - reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, - }; - for (auto method : methods) { - if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", - ret, method.name, method.signature); - return ANI_NOT_FOUND; - } - } - *result = ANI_VERSION_1; - - AniWindowManager::AniWindowManagerInit(env); - OHOS::Rosen::ANI_Window_Constructor(vm, result); - return ANI_OK; -} -} \ No newline at end of file diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp new file mode 100644 index 0000000000..a338f86bf4 --- /dev/null +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp @@ -0,0 +1,148 @@ +/* + * 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_window_stage.h" + +#include + +#include "ani.h" +#include "ani_window.h" +#include "ani_window_manager.h" +#include "ani_window_utils.h" +#include "window_manager_hilog.h" +#include "permission.h" +#include "window_scene.h" + +using OHOS::Rosen::WindowScene; + + +static void SetWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj, + ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag) +{ + using namespace OHOS::Rosen; + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + windowStage->SetWindowRectAutoSave(env, enabled, isSaveBySpecifiedFlag); +} + +static ani_boolean IsWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ani_boolean(false); + } + return windowStage->IsWindowRectAutoSave(env); +} + +static void RemoveStartingWindow(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] start"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] windowStage is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + windowStage->RemoveStartingWindow(env); +} + +static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGD(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::DEFAULT, "[ANI] windowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return windowStage->GetMainWindow(env); +} + +static ani_ref CreateSubWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_string name) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindowStage* windowStage = reinterpret_cast(nativeObj); + if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { + TLOGD(WmsLogTag::DEFAULT, "[ANI] windowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(env); + } + return windowStage->OnCreateSubWindow(env, name); +} + +extern "C" { +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + using namespace OHOS::Rosen; + ani_status ret; + ani_env* env; + if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] null env"); + return ANI_NOT_FOUND; + } + + ani_class cls = nullptr; + if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] can't find class %{public}u", ret); + return ANI_NOT_FOUND; + } + std::array methods = { + ani_native_function {"setWindowRectAutoSave", "JZZ:V", + reinterpret_cast(SetWindowRectAutoSave)}, + ani_native_function {"isWindowRectAutoSave", "J:Z", + reinterpret_cast(IsWindowRectAutoSave)}, + ani_native_function {"removeStartingWindow", "J:V", + reinterpret_cast(RemoveStartingWindow)}, + ani_native_function {"loadContentSync", + "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + reinterpret_cast(AniWindowStage::LoadContent)}, + ani_native_function {"disableWindowDecorSync", nullptr, + reinterpret_cast(AniWindowStage::DisableWindowDecor)}, + ani_native_function {"setShowOnLockScreenSync", + nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, + ani_native_function {"getMainWindowSync", "J:L@ohos/window/window/Window;", + reinterpret_cast(WindowGetMainWindow)}, + ani_native_function {"createSubWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", + reinterpret_cast(CreateSubWindow)}, + ani_native_function {"onSync", nullptr, + reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, + ani_native_function {"offSync", nullptr, + reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, + }; + for (auto method : methods) { + if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] bind window method fail %{public}u, %{public}s, %{public}s", + ret, method.name, method.signature); + return ANI_NOT_FOUND; + } + } + *result = ANI_VERSION_1; + + AniWindowManager::AniWindowManagerInit(env); + OHOS::Rosen::ANI_Window_Constructor(vm, result); + return ANI_OK; +} +} \ No newline at end of file diff --git a/window_scene/interfaces/kits/ani/scene_session_manager/BUILD.gn b/window_scene/interfaces/kits/ani/scene_session_manager/BUILD.gn index 810fb3e2f0..26351a1fb8 100644 --- a/window_scene/interfaces/kits/ani/scene_session_manager/BUILD.gn +++ b/window_scene/interfaces/kits/ani/scene_session_manager/BUILD.gn @@ -34,6 +34,7 @@ config("scene_session_manager_kit_public_config") { # lib generate ohos_shared_library("scenesessionmanagerani_kit") { + shlib_type = "ani" branch_protector_ret = "pac_ret" sanitize = { cfi = true -- Gitee From e3427f60ee5f4fe08785bb9dd5d8c331cb9f2891 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 22 Jul 2025 16:43:53 +0800 Subject: [PATCH 019/109] Add screen onDestory Signed-off-by: chenpeng --- .../display_ani/src/display_ani_listener.cpp | 63 ++++++++++++++++--- .../display_ani/src/display_ani_utils.cpp | 6 +- .../screen_ani/include/screen_ani_listener.h | 4 ++ .../screen_ani/src/screen_ani_listener.cpp | 37 +++++++++-- .../screen_ani/src/screen_ani_manager.cpp | 2 + .../screen_ani/src/screen_ani_utils.cpp | 6 +- 6 files changed, 99 insertions(+), 19 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 611e534b7b..6706817f07 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -83,6 +83,7 @@ void DisplayAniListener::RemoveAllCallback() void DisplayAniListener::OnCreate(DisplayId id) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); + std::lock_guard lock(aniCallBackMtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); @@ -90,13 +91,12 @@ void DisplayAniListener::OnCreate(DisplayId id) } TLOGI(WmsLogTag::DMS, "[ANI] OnCreate is called, displayId: %{public}d", static_cast(id)); if (aniCallBack_.empty()) { - TLOGE(WmsLogTag::DMS, "[ANI] OnCreate not register!"); + TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; } - std::lock_guard lock(aniCallBackMtx_); auto it = aniCallBack_.find(EVENT_ADD); if (it == aniCallBack_.end()) { - TLOGE(WmsLogTag::DMS, "[ANI] OnCreate not this event, return"); + TLOGE(WmsLogTag::DMS, "[ANI] Add callback has not been registered"); return; } std::vector vec = it->second; @@ -104,12 +104,16 @@ void DisplayAniListener::OnCreate(DisplayId id) // find callbacks in vector for (ani_ref oneAniCallback : vec) { ani_boolean result; - if (ANI_OK != env_->Reference_IsUndefined(oneAniCallback, &result)) { - TLOGE(WmsLogTag::DMS, "[ANI] OnCreate Callback is undefined, return"); + if (env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "null env_"); return; } - if (ANI_OK != env_->Reference_IsNull(oneAniCallback, &result)) { - TLOGE(WmsLogTag::DMS, "[ANI] OnCreate Callback is null, return"); + ani_boolean undefRes; + ani_boolean nullRes; + env_->Reference_IsUndefined(oneAniCallback, &undefRes); + env_->Reference_IsNull(oneAniCallback, &nullRes); + if (undefRes || nullRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); return; } auto task = [env = env_, oneAniCallback, id] () { @@ -127,6 +131,51 @@ void DisplayAniListener::OnCreate(DisplayId id) void DisplayAniListener::OnDestroy(DisplayId id) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); + std::lock_guard lock(aniCallBackMtx_); + auto thisListener = weakRef_.promote(); + if (thisListener == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + return; + } + TLOGI(WmsLogTag::DMS, "[ANI] OnDestroy is called, displayId: %{public}d", static_cast(id)); + if (aniCallBack_.empty()) { + TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); + return; + } + auto it = aniCallBack_.find(EVENT_REMOVE); + if (it == aniCallBack_.end()) { + TLOGE(WmsLogTag::DMS, "[ANI] Remove callback has not been registered"); + return; + } + std::vector vec = it->second; + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + // find callbacks in vector + for (ani_ref oneAniCallback : vec) { + ani_boolean result; + if (env_ == nullptr) { + TLOGE(WmsLogTag::DMS, "OnDestroy: null env_"); + return; + } + ani_boolean undefRes; + ani_boolean nullRes; + env_->Reference_IsUndefined(oneAniCallback, &undefRes); + env_->Reference_IsNull(oneAniCallback, &nullRes); + if (undefRes || nullRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + return; + } + auto task = [env = env_, oneAniCallback, id] () { + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", + nullptr, oneAniCallback, static_cast(id)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + } } void DisplayAniListener::OnChange(DisplayId id) { diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 681f200b84..68f593212d 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -239,13 +239,13 @@ ani_status DisplayAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); return ret; } - va_list args; - va_start(args, signature); - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); if (func == nullptr) { TLOGI(WmsLogTag::DEFAULT, "[ANI] null func ani"); return ret; } + va_list args; + va_start(args, signature); + TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); ret = env->Function_Call_Void_V(func, args); va_end(args); if (ret != ANI_OK) { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h index 4284897185..4742074679 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h @@ -19,6 +19,8 @@ #include #include "screen_manager.h" #include "ani.h" +#include "event_handler.h" +#include "refbase.h" namespace OHOS { namespace Rosen { @@ -35,12 +37,14 @@ public: void OnChange(ScreenId id) override; ani_status CallAniMethodVoid(ani_object object, const char* cls, const char* method, const char* signature, ...); + void SetMainEventHandler(); private: ani_env* env_; std::mutex mtx_; std::map> aniCallBack_; wptr weakRef_; + std::shared_ptr eventHandler_ = nullptr; }; const std::string EVENT_CONNECT = "connect"; const std::string EVENT_DISCONNECT = "disconnect"; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 663522ac55..640fabcf43 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -23,6 +23,15 @@ ScreenAniListener::~ScreenAniListener() { TLOGI(WmsLogTag::DMS, "[ANI]~ScreenAniListener"); } + +void ScreenAniListener::SetMainEventHandler() +{ + auto mainRunner = AppExecFwk::EventRunner::GetMainEventRunner(); + if (mainRunner == nullptr) { + return; + } + eventHandler_ = std::make_shared(mainRunner); +} void ScreenAniListener::AddCallback(const std::string& type, ani_ref callback) { @@ -107,9 +116,17 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); return; } - - ScreenAniUtils::CallAniFunctionVoid(env_, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + + auto task = [env = env_, oneAniCallback, id] () { + ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", + "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniScreenListener::ConnectCallBack", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); } } void ScreenAniListener::OnDisconnect(ScreenId id) @@ -152,9 +169,17 @@ void ScreenAniListener::OnDisconnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); return; } - - ScreenAniUtils::CallAniFunctionVoid(env_, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + + auto task = [env = env_, oneAniCallback, id] () { + ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", + "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, "dms:AniScreenListener::DisconnectCallBack", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index a002163c95..3d0ec5aff5 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -85,6 +85,8 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref return; } screenAniListener->AddCallback(typeString, cbRef); + screenAniListener->SetMainEventHandler(); + ret = ProcessRegisterCallback(env, typeString, screenAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register screen listener with type, errcode: %{public}d", ret); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index 30e7d0aa27..f130ef75a8 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -170,13 +170,13 @@ ani_status ScreenAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); return ret; } - va_list args; - va_start(args, signature); - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); if (func == nullptr) { TLOGI(WmsLogTag::DEFAULT, "[ANI] null func ani"); return ret; } + va_list args; + va_start(args, signature); + TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); ret = env->Function_Call_Void_V(func, args); va_end(args); if (ret != ANI_OK) { -- Gitee From ba03fa55cd25ff7528e2a5796f0eeb8cf50d13bd Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 22 Jul 2025 17:38:15 +0800 Subject: [PATCH 020/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/src/display_ani_listener.cpp | 47 +++++++++---------- .../display_ani/src/display_ani_utils.cpp | 12 ++--- .../screen_ani/src/screen_ani_listener.cpp | 39 ++++++--------- .../screen_ani/src/screen_ani_utils.cpp | 22 ++++----- 4 files changed, 53 insertions(+), 67 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 6706817f07..47fb60cce5 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -44,7 +44,7 @@ void DisplayAniListener::AddCallback(const std::string& type, ani_ref callback) std::lock_guard lock(aniCallBackMtx_); ani_ref cbRef{}; if (env_->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]create global ref fail"); + TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); return; }; aniCallBack_[type].emplace_back(cbRef); @@ -82,14 +82,13 @@ void DisplayAniListener::RemoveAllCallback() void DisplayAniListener::OnCreate(DisplayId id) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); - std::lock_guard lock(aniCallBackMtx_); + TLOGI(WmsLogTag::DMS, "[ANI] begin, displayId: %{public}" PRIu64, id); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnCreate is called, displayId: %{public}d", static_cast(id)); + std::lock_guard lock(aniCallBackMtx_); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; @@ -103,7 +102,6 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); // find callbacks in vector for (ani_ref oneAniCallback : vec) { - ani_boolean result; if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "null env_"); return; @@ -114,14 +112,14 @@ void DisplayAniListener::OnCreate(DisplayId id) env_->Reference_IsNull(oneAniCallback, &nullRes); if (undefRes || nullRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); - return; + continue; } auto task = [env = env_, oneAniCallback, id] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, @@ -131,14 +129,13 @@ void DisplayAniListener::OnCreate(DisplayId id) void DisplayAniListener::OnDestroy(DisplayId id) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); - std::lock_guard lock(aniCallBackMtx_); + TLOGI(WmsLogTag::DMS, "[ANI] begin, displayId: %{public}" PRIu64, id); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnDestroy is called, displayId: %{public}d", static_cast(id)); + std::lock_guard lock(aniCallBackMtx_); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; @@ -152,7 +149,6 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); // find callbacks in vector for (ani_ref oneAniCallback : vec) { - ani_boolean result; if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "OnDestroy: null env_"); return; @@ -163,14 +159,14 @@ void DisplayAniListener::OnDestroy(DisplayId id) env_->Reference_IsNull(oneAniCallback, &nullRes); if (undefRes || nullRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); - return; + continue; } auto task = [env = env_, oneAniCallback, id] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, @@ -179,13 +175,12 @@ void DisplayAniListener::OnDestroy(DisplayId id) } void DisplayAniListener::OnChange(DisplayId id) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin, displayId: %{public}" PRIu64, id); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnChange is called, displayId: %{public}d", static_cast(id)); std::lock_guard lock(aniCallBackMtx_); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); @@ -208,14 +203,14 @@ void DisplayAniListener::OnChange(DisplayId id) env_->Reference_IsNull(oneAniCallback, &nullRes); if (undefRes || nullRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); - return; + continue; } auto task = [env = env_, oneAniCallback, id] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniWindowListener::SizeChangeCallBack", 0, @@ -252,7 +247,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) nullptr, oneAniCallback, hasPrivate); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::PrivateWindowCallback", 0, @@ -288,7 +283,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) nullptr, oneAniCallback, static_cast(foldStatus)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldStatusChangedCallback", 0, @@ -322,7 +317,7 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) nullptr, oneAniCallback, cbArray); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldAngleChangeCallback", 0, @@ -357,7 +352,7 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) nullptr, oneAniCallback, isCapture); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CaptureStatusChangedCallback", 0, @@ -393,7 +388,7 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) nullptr, oneAniCallback, static_cast(foldDisplayMode)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::DisplayModeChangedCallback", 0, @@ -430,7 +425,7 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) nullptr, oneAniCallback, rectObj); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::AvailableAreaChangedCallback", 0, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 68f593212d..7feeb5647c 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -227,29 +227,29 @@ ani_status DisplayAniUtils::GetAniString(ani_env* env, const std::string& str, a ani_status DisplayAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin"); + TLOGI(WmsLogTag::DMS, "[ANI]CallAniFunctionVoid begin"); ani_status ret = ANI_OK; ani_namespace aniNamespace{}; if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot find ns %{public}d", ret); return ret; } ani_function func{}; if ((ret = env->Namespace_FindFunction(aniNamespace, fn, signature, &func)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot find callBack %{public}d", ret); return ret; } if (func == nullptr) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] null func ani"); + TLOGE(WmsLogTag::DMS, "[ANI] null func ani"); return ret; } va_list args; va_start(args, signature); - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); + TLOGI(WmsLogTag::DMS, "[ANI]CallAniFunctionVoid begin %{public}s", signature); ret = env->Function_Call_Void_V(func, args); va_end(args); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot run callBack %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot run callBack %{public}d", ret); return ret; } return ret; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 640fabcf43..b3cf5c149f 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -43,7 +43,7 @@ void ScreenAniListener::AddCallback(const std::string& type, ani_ref callback) std::lock_guard lock(mtx_); ani_ref cbRef{}; if (env_->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]create global ref fail"); + TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); return; }; aniCallBack_[type].emplace_back(cbRef); @@ -78,14 +78,13 @@ void ScreenAniListener::RemoveCallback(ani_env* env, const std::string& type, an } void ScreenAniListener::OnConnect(ScreenId id) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin, displayId: %{public}" PRIu64, id); std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnConnect is called, displayId: %{public}d", static_cast(id)); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not register!"); return; @@ -108,13 +107,9 @@ void ScreenAniListener::OnConnect(ScreenId id) env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); - return; - } - if (nullRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); - return; + if (undefRes || nullRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + continue; } auto task = [env = env_, oneAniCallback, id] () { @@ -122,7 +117,7 @@ void ScreenAniListener::OnConnect(ScreenId id) "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniScreenListener::ConnectCallBack", 0, @@ -135,10 +130,10 @@ void ScreenAniListener::OnDisconnect(ScreenId id) std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect is called, displayId: %{public}d", static_cast(id)); + TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect is called, displayId: %{public}" PRIu64, id); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not register!"); return; @@ -161,13 +156,9 @@ void ScreenAniListener::OnDisconnect(ScreenId id) env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); - return; - } - if (nullRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); - return; + if (undefRes || nullRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + continue; } auto task = [env = env_, oneAniCallback, id] () { @@ -175,7 +166,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniScreenListener::DisconnectCallBack", 0, @@ -190,10 +181,10 @@ void ScreenAniListener::OnChange(ScreenId id) std::lock_guard lock(mtx_); auto thisListener = weakRef_.promote(); if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] this listener is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - TLOGI(WmsLogTag::DMS, "[ANI] OnChange is called, displayId: %{public}d", static_cast(id)); + TLOGI(WmsLogTag::DMS, "[ANI] OnChange is called, displayId: %{public}" PRIu64, id); if (aniCallBack_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); return; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index f130ef75a8..d3c26f9da0 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -100,11 +100,11 @@ ani_array_ref ScreenAniUtils::NewNativeArray(ani_env* env, const std::string& ob ani_array_ref array = nullptr; ani_class cls; if (env->FindClass(objName.c_str(), &cls) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + TLOGE(WmsLogTag::DMS, "[ANI] class not found"); return array; } if (env->Array_New_Ref(cls, size, CreateAniUndefined(env), &array) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] create array failed"); + TLOGE(WmsLogTag::DMS, "[ANI] create array failed"); } return array; } @@ -113,17 +113,17 @@ ani_object ScreenAniUtils::NewNativeObject(ani_env* env, const std::string& objN { ani_class cls; if (env->FindClass(objName.c_str(), &cls) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); + TLOGE(WmsLogTag::DMS, "[ANI] class not found"); return CreateAniUndefined(env); } ani_method ctor; if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found"); + TLOGE(WmsLogTag::DMS, "[ANI] ctor not found"); return CreateAniUndefined(env); } ani_object obj; if (env->Object_New(cls, ctor, &obj) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new obj"); + TLOGE(WmsLogTag::DMS, "[ANI] fail to new obj"); return CreateAniUndefined(env); } return obj; @@ -158,29 +158,29 @@ ani_status ScreenAniUtils::ConvertScreens(ani_env *env, std::vector ani_status ScreenAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_status ret = ANI_OK; ani_namespace aniNamespace{}; if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot find ns %{public}d", ret); return ret; } ani_function func{}; if ((ret = env->Namespace_FindFunction(aniNamespace, fn, signature, &func)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot find callBack %{public}d", ret); return ret; } if (func == nullptr) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] null func ani"); + TLOGE(WmsLogTag::DMS, "[ANI] null func ani"); return ret; } va_list args; va_start(args, signature); - TLOGI(WmsLogTag::DEFAULT, "[ANI]CallAniFunctionVoid begin %{public}s", signature); + TLOGI(WmsLogTag::DMS, "[ANI]CallAniFunctionVoid begin %{public}s", signature); ret = env->Function_Call_Void_V(func, args); va_end(args); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot run callBack %{public}d", ret); + TLOGE(WmsLogTag::DMS, "[ANI]canot run callBack %{public}d", ret); return ret; } return ret; -- Gitee From 321f4dfee6f6e7cbaef4f3b8efb6740b590c72f9 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 22 Jul 2025 23:00:18 +0800 Subject: [PATCH 021/109] =?UTF-8?q?1=E3=80=81on('screenShot')=20=E7=AD=89?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E7=9A=84bug=E4=BF=AE=E5=A4=8D=EF=BC=8C?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=97=B6=E9=99=A4=E4=BA=86=E6=A3=80=E6=9F=A5?= =?UTF-8?q?listener=E6=98=AF=E5=90=A6=E4=B8=BA=E7=A9=BA=EF=BC=8C=E8=BF=98?= =?UTF-8?q?=E9=9C=80=E6=A3=80=E6=9F=A5callback=E6=98=AF=E5=90=A6=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=202=E3=80=81snapshot=E9=80=82=E9=85=8Darkui=E7=9A=84t?= =?UTF-8?q?aihe=20ANI=E7=9A=84PiexelMap=203=E3=80=81systemDensityChange?= =?UTF-8?q?=E5=92=8CDisplayIdChange=E4=B8=8A0702=204=E3=80=81OnAvoidAreaCh?= =?UTF-8?q?ange=E5=8E=BB=E9=99=A4=E6=B2=A1=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E5=BC=BA=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangzilin --- interfaces/kits/ani/window_runtime/BUILD.gn | 2 +- .../window_stage_ani/ets/@ohos.window.ets | 10 ++ .../include/ani_window_listener.h | 9 +- .../include/ani_window_register_manager.h | 6 + .../window_stage_ani/src/ani_window.cpp | 4 +- .../src/ani_window_listener.cpp | 116 ++++++++++++------ .../src/ani_window_register_manager.cpp | 42 +++++++ 7 files changed, 147 insertions(+), 42 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index 3b275ea3ce..09bc59e3c0 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -78,7 +78,7 @@ ohos_shared_library("windowstageani_kit") { "hilog:libhilog", "hitrace:hitrace_meter", "image_framework:image", - "image_framework:image_ani", + "image_framework:image_taihe", "image_framework:image_native", "ipc:ipc_napi", "ipc:ipc_single", diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c2eabec758..c52f9429a2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -3071,6 +3071,16 @@ function runWindowListenerBooleanArgCallBack(cb: object, cbArg: boolean): void { func(cbArg); } +function runSystemDensityChangeCallback(cb: object, density: number): void { + const func = cb as (density: number) => void; + func(density as number); +} + +function runDisplayIdChangeCallback(cb: object, displayId: number): void { + const func = cb as (displayId: number) => void; + func(displayId as number); +} + function runSystemBarTintChangeCallBack(cb: object, tint: object): void { const func = cb as (tint: SystemBarTintState) => void; func(tint as SystemBarTintState); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 3dbbc78a75..4dc286799b 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -53,6 +53,8 @@ const std::string WINDOW_RECT_CHANGE_CB = "windowRectChange"; const std::string SUB_WINDOW_CLOSE_CB = "subWindowClose"; const std::string WINDOW_HIGHLIGHT_CHANGE_CB = "windowHighlightChange"; const std::string WINDOW_STAGE_CLOSE_CB = "windowStageClose"; +const std::string SYSTEM_DENSITY_CHANGE_CB = "systemDensityChange"; +const std::string WINDOW_DISPLAYID_CHANGE_CB = "displayIdChange"; class AniWindowListener : public IWindowChangeListener, public ISystemBarChangedListener, @@ -74,13 +76,16 @@ class AniWindowListener : public IWindowChangeListener, public IWindowRectChangeListener, public IMainWindowCloseListener, public ISubWindowCloseListener, - public IWindowHighlightChangeListener { + public IWindowHighlightChangeListener, + public ISystemDensityChangeListener, + public IDisplayIdChangeListener { public: AniWindowListener(ani_env* env, ani_ref callback, CaseType caseType) : env_(env), aniCallBack_(callback), caseType_(caseType), weakRef_(wptr (this)) {} ~AniWindowListener(); ani_ref GetAniCallBack() const { return aniCallBack_; } + void SetAniCallBack(ani_ref aniCallBack) { aniCallBack_ = aniCallBack; } void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) override; void OnSizeChange(Rect rect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr) override; @@ -106,6 +111,8 @@ public: void OnWaterMarkFlagUpdate(bool showWaterMark) override; void SetMainEventHandler(); void OnWindowVisibilityChangedCallback(const bool isVisible) override; + void OnSystemDensityChanged(float density) override; + void OnDisplayIdChanged(DisplayId displayId) override; void OnWindowStatusChange(WindowStatus status) override; void OnWindowNoInteractionCallback() override; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index f97b13ce96..0e99c1336b 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -49,6 +49,8 @@ enum class RegisterListenerType : uint32_t { WINDOW_HIGHLIGHT_CHANGE_CB, WINDOW_STAGE_EVENT_CB, WINDOW_STAGE_CLOSE_CB, + SYSTEM_DENSITY_CHANGE_CB, + WINDOW_DISPLAYID_CHANGE_CB, }; class AniWindowRegisterManager { @@ -91,6 +93,10 @@ private: sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowVisibilityChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); + WmErrorCode ProcessSystemDensityChangeRegister(sptr listner, sptr window, + bool isRegister, ani_env* env); + WmErrorCode ProcessDisplayIdChangeRegister(sptr listner, sptr window, + bool isRegister, ani_env* env); WmErrorCode ProcessWindowNoInteractionRegister(sptr listener, sptr window, bool isRegister, ani_env* env, ani_double timeout); WmErrorCode ProcessWindowStatusChangeRegister(sptr listener, sptr window, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index bde798b21f..2fce6c09d9 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -25,7 +25,7 @@ #include "ani_window_utils.h" #include "permission.h" #include "pixel_map.h" -#include "pixel_map_ani.h" +#include "pixel_map_taihe_ani.h" #include "window_helper.h" #include "window_scene.h" #include "window_manager.h" @@ -2035,7 +2035,7 @@ ani_object AniWindow::Snapshot(ani_env* env) if (pixelMap == nullptr) { return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } - auto nativePixelMap = Media::PixelMapAni::CreatePixelMap(env, pixelMap); + auto nativePixelMap = Media::PixelMapTaiheAni::CreateEtsPixelMap(env, pixelMap); if (nativePixelMap == nullptr) { return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index a54456fbd3..15f6e17840 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -58,8 +58,8 @@ void AniWindowListener::OnSizeChange(Rect rect, WindowSizeChangeReason reason, auto task = [self = weakRef_, rect, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowSizeCallBack", @@ -82,8 +82,8 @@ void AniWindowListener::OnSystemBarPropertyChange(DisplayId displayId, const Sys TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, displayId, tints] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallBack", @@ -103,13 +103,13 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT auto task = [self = weakRef_, eng = env_, avoidArea, type] { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnAvoidAreaChanged"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, static_cast(type)); + auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, type); AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallBack", - nullptr, thisListener->aniCallBack_, nativeAvoidArea, ani_int(type)); + nullptr, thisListener->aniCallBack_, nativeAvoidArea, static_cast(type)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -118,14 +118,54 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } +void AniWindowListener::OnSystemDensityChanged(float density) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, density, eng = env_] { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnSystemDensityChanged"); + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemDensityChangeCallback", + nullptr, thisListener->aniCallBack_, static_cast(density)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); +} + +void AniWindowListener::OnDisplayIdChanged(DisplayId displayId) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + auto task = [self = weakRef_, displayId, eng = env_] { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnDisplayIdChanged"); + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); + return; + } + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runDisplayIdChangeCallback", + nullptr, thisListener->aniCallBack_, static_cast(displayId)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); + return; + } + eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); +} + void AniWindowListener::LifeCycleCallBack(LifeCycleEventType eventType) { TLOGI(WmsLogTag::DEFAULT, "[ANI]LifeCycleCallBack, envent type: %{public}u", eventType); auto task = [self = weakRef_, eventType, eng = env_] () { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::LifeCycleCallBack"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowEventCallBack", @@ -199,8 +239,8 @@ void AniWindowListener::OnSizeChange(const sptr& info, info->rect_.posX_, info->rect_.posY_, info->rect_.width_, info->rect_.height_); // callback should run in js thread auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallBack", @@ -214,8 +254,8 @@ void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanel keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallBack", @@ -229,8 +269,8 @@ void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanel keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallBack", @@ -242,8 +282,8 @@ void AniWindowListener::OnTouchOutside() const TLOGI(WmsLogTag::DEFAULT, "[ANI] touchoutside"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowTouchOutCallback", @@ -262,8 +302,8 @@ void AniWindowListener::OnScreenshot() TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallBack", @@ -281,8 +321,8 @@ void AniWindowListener::OnDialogTargetTouch() const TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowDialogTargetCallback", @@ -305,8 +345,8 @@ void AniWindowListener::OnGestureNavigationEnabledUpdate(bool enable) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, enable] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", @@ -324,8 +364,8 @@ void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, showWaterMark] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", @@ -343,8 +383,8 @@ void AniWindowListener::OnWindowNoInteractionCallback() TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "this listener is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowNoInteractionCallback", @@ -363,8 +403,8 @@ void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) TLOGI(WmsLogTag::DEFAULT, "[ANI] windowstatus: %{public}u", windowstatus); auto task = [self = weakRef_, windowstatus, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowStatusCallBack", @@ -383,8 +423,8 @@ void AniWindowListener::OnWindowVisibilityChangedCallback(const bool isVisible) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, isVisible] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", @@ -402,8 +442,8 @@ void AniWindowListener::OnWindowHighlightChange(bool isHighlight) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, isHighlight] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", @@ -439,8 +479,8 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) } auto task = [self = weakRef_, rect, reason, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowRectCallback", @@ -466,8 +506,8 @@ void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) TLOGI(WmsLogTag::WMS_SUB, "[ANI]"); auto task = [self = weakRef_, eng = env_, terminateCloseProcess] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr) { - TLOGNE(WmsLogTag::WMS_SUB, "[ANI]this listener or eng is nullptr"); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + TLOGE(WmsLogTag::WMS_SUB, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 3a8a89a7ee..85f1c6dcac 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -50,6 +50,8 @@ const std::map WINDOW_LISTENER_MAP { {WINDOW_RECT_CHANGE_CB, RegisterListenerType::WINDOW_RECT_CHANGE_CB}, {SUB_WINDOW_CLOSE_CB, RegisterListenerType::SUB_WINDOW_CLOSE_CB}, {WINDOW_HIGHLIGHT_CHANGE_CB, RegisterListenerType::WINDOW_HIGHLIGHT_CHANGE_CB}, + {WINDOW_DISPLAYID_CHANGE_CB, RegisterListenerType::WINDOW_DISPLAYID_CHANGE_CB}, + {SYSTEM_DENSITY_CHANGE_CB, RegisterListenerType::SYSTEM_DENSITY_CHANGE_CB}, }; const std::map WINDOW_STAGE_LISTENER_MAP { // white register list for window stage @@ -128,6 +130,40 @@ WmErrorCode AniWindowRegisterManager::ProcessAvoidAreaChangeRegister(sptr listener, + sptr window, bool isRegister, ani_env* env) +{ + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]Window is nullptr"); + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterSystemDensityChangeListener(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterSystemDensityChangeListener(thisListener)); + } + return ret; +} + +WmErrorCode AniWindowRegisterManager::ProcessDisplayIdChangeRegister(sptr listener, + sptr window, bool isRegister, ani_env* env) +{ + if (window == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]Window is nullptr"); + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterDisplayIdChangeListener(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterDisplayIdChangeListener(thisListener)); + } + return ret; +} + WmErrorCode AniWindowRegisterManager::ProcessLifeCycleEventRegister(sptr listener, sptr window, bool isRegister, ani_env* env) { @@ -480,6 +516,10 @@ WmErrorCode AniWindowRegisterManager::ProcessListener(RegisterListenerType regis return ProcessSubWindowCloseRegister(windowManagerListener, window, isRegister, env); case static_cast(RegisterListenerType::WINDOW_HIGHLIGHT_CHANGE_CB): return ProcessWindowHighlightChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::SYSTEM_DENSITY_CHANGE_CB): + return ProcessSystemDensityChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_DISPLAYID_CHANGE_CB): + return ProcessDisplayIdChangeRegister(windowManagerListener, window, isRegister, env); default: TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", static_cast(registerListenerType)); @@ -529,6 +569,7 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } + it->second->SetAniCallBack(nullptr); env->GlobalReference_Delete(it->second->GetAniCallBack()); jsCbMap_[type].erase(it++); } @@ -547,6 +588,7 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } + it->second->SetAniCallBack(nullptr); env->GlobalReference_Delete(it->second->GetAniCallBack()); jsCbMap_[type].erase(it); break; -- Gitee From 34cf35fb9b8a2d6c16d3975e67c3d0f09bd42ea2 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Wed, 23 Jul 2025 09:11:05 +0800 Subject: [PATCH 022/109] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_listener.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 15f6e17840..3892238738 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -129,7 +129,7 @@ void AniWindowListener::OnSystemDensityChanged(float density) return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemDensityChangeCallback", - nullptr, thisListener->aniCallBack_, static_cast(density)); + nullptr, thisListener->aniCallBack_, static_cast(density)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -149,7 +149,7 @@ void AniWindowListener::OnDisplayIdChanged(DisplayId displayId) return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runDisplayIdChangeCallback", - nullptr, thisListener->aniCallBack_, static_cast(displayId)); + nullptr, thisListener->aniCallBack_, static_cast(displayId)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); -- Gitee From a7d9ccdc79a5e71c49d00eb23c4798a7f458d1f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=87=AF?= Date: Tue, 22 Jul 2025 09:19:59 +0000 Subject: [PATCH 023/109] update observer keyboard did show or dis hide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张凯 Change-Id: I04820f01011c1e6f25ae667c330c6f6730342aeb --- .../window_stage_ani/ets/@ohos.window.ets | 17 ++++++++++++++--- .../src/ani_window_listener.cpp | 14 ++++++-------- .../window_stage_ani/src/ani_window_utils.cpp | 6 ++++-- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c2eabec758..253445cda6 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1534,18 +1534,29 @@ export interface GetWindowsByCoordinateParam { */ export interface KeyboardInfo { /** - * The position and size of the keyboard + * The position and size of keyboard before animation. * * @type { Rect } * @syscap SystemCapability.Window.SessionManager * @atomicservice * @since 18 */ - rect: Rect; + beginRect: Rect; + + /** + * The position and size of keyboard after animation completed. + * + * @type { Rect } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 18 + */ + endRect: Rect; } export class KeyboardInfoInternal implements KeyboardInfo { - rect: Rect; + beginRect: Rect; + endRect: Rect; } /** diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index a54456fbd3..fe7ea3f459 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -209,10 +209,9 @@ void AniWindowListener::OnSizeChange(const sptr& info, void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanelInfo) { - TLOGI(WmsLogTag::WMS_KEYBOARD, - "keyboardPanelInfo, rect: [%{public}d, %{public}d, %{public}u, %{public}u]", - keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, - keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); + TLOGD(WmsLogTag::WMS_KEYBOARD, + "keyboardPanelInfo, beginRect: %{public}s, endRect: %{public}s", + keyboardPanelInfo.beginRect_.ToString().c_str(), keyboardPanelInfo.endRect_.ToString().c_str()); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); @@ -224,10 +223,9 @@ void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanel void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanelInfo) { - TLOGI(WmsLogTag::WMS_KEYBOARD, - "keyboardPanelInfo, rect: [%{public}d, %{public}d, %{public}u, %{public}u]", - keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, - keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); + TLOGD(WmsLogTag::WMS_KEYBOARD, + "keyboardPanelInfo, beginRect: %{public}s, endRect: %{public}s", + keyboardPanelInfo.beginRect_.ToString().c_str(), keyboardPanelInfo.endRect_.ToString().c_str()); auto thisListener = weakRef_.promote(); if (thisListener == nullptr || env_ == nullptr) { TLOGE(WmsLogTag::WMS_KEYBOARD, "this listener or env is nullptr."); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index cb13080aea..96f49f18bf 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -425,8 +425,10 @@ ani_object AniWindowUtils::CreateAniKeyboardInfo(ani_env* env, const KeyboardPan TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] failed to new obj"); return AniWindowUtils::CreateAniUndefined(env); } - CallAniMethodVoid(env, keyboardInfo, aniClass, "rect", nullptr, - CreateAniRect(env, keyboardPanelInfo.rect_)); + CallAniMethodVoid(env, keyboardInfo, aniClass, "beginRect", nullptr, + CreateAniRect(env, keyboardPanelInfo.beginRect_)); + CallAniMethodVoid(env, keyboardInfo, aniClass, "endRect", nullptr, + CreateAniRect(env, keyboardPanelInfo.endRect_)); return keyboardInfo; } -- Gitee From 544601aab919abb8ec223b4fd9f9003d0457c087 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Wed, 23 Jul 2025 10:38:08 +0800 Subject: [PATCH 024/109] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_register_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 85f1c6dcac..3c9250e409 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -569,8 +569,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } - it->second->SetAniCallBack(nullptr); env->GlobalReference_Delete(it->second->GetAniCallBack()); + it->second->SetAniCallBack(nullptr); jsCbMap_[type].erase(it++); } } else { @@ -588,8 +588,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } - it->second->SetAniCallBack(nullptr); env->GlobalReference_Delete(it->second->GetAniCallBack()); + it->second->SetAniCallBack(nullptr); jsCbMap_[type].erase(it); break; } -- Gitee From 503bb190e755fcda9367da7bfe6113674d1a0e3c Mon Sep 17 00:00:00 2001 From: chenpeng Date: Wed, 23 Jul 2025 10:38:31 +0800 Subject: [PATCH 025/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9AaniCallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../include/display_ani_listener.h | 4 +- .../display_ani/src/display_ani_listener.cpp | 90 +++++++++---------- .../screen_ani/include/screen_ani_listener.h | 2 +- .../screen_ani/src/screen_ani_listener.cpp | 30 +++---- 4 files changed, 63 insertions(+), 63 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h index b22b3ef1f6..d2e1d4946d 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h @@ -54,8 +54,8 @@ public: private: ani_env* env_; - std::mutex aniCallBackMtx_; - std::map> aniCallBack_; + std::mutex aniCallbackMtx_; + std::map> aniCallback_; wptr weakRef_ = nullptr; std::shared_ptr eventHandler_ = nullptr; }; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 47fb60cce5..6b57b6a95c 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -41,22 +41,22 @@ void DisplayAniListener::AddCallback(const std::string& type, ani_ref callback) TLOGE(WmsLogTag::DMS, "env_ nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); + std::lock_guard lock(aniCallbackMtx_); ani_ref cbRef{}; if (env_->GlobalReference_Create(callback, &cbRef) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); return; }; - aniCallBack_[type].emplace_back(cbRef); - TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallBack_ size: %{public}u!", - static_cast(aniCallBack_[type].size())); + aniCallback_[type].emplace_back(cbRef); + TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallback_ size: %{public}u!", + static_cast(aniCallback_[type].size())); } void DisplayAniListener::RemoveCallback(ani_env* env, const std::string& type, ani_ref callback) { - std::lock_guard lock(aniCallBackMtx_); - auto it = aniCallBack_.find(type); - if (it == aniCallBack_.end()) { + std::lock_guard lock(aniCallbackMtx_); + auto it = aniCallback_.find(type); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Listener no callback to remove"); return; } @@ -76,8 +76,8 @@ void DisplayAniListener::RemoveCallback(ani_env* env, const std::string& type, a void DisplayAniListener::RemoveAllCallback() { - std::lock_guard lock(aniCallBackMtx_); - aniCallBack_.clear(); + std::lock_guard lock(aniCallbackMtx_); + aniCallback_.clear(); } void DisplayAniListener::OnCreate(DisplayId id) @@ -88,13 +88,13 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; } - auto it = aniCallBack_.find(EVENT_ADD); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_ADD); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Add callback has not been registered"); return; } @@ -135,13 +135,13 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; } - auto it = aniCallBack_.find(EVENT_REMOVE); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_REMOVE); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Remove callback has not been registered"); return; } @@ -181,13 +181,13 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); return; } - auto it = aniCallBack_.find(EVENT_CHANGE); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_CHANGE); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not this event, return"); return; } @@ -226,12 +226,12 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not register!"); return; } - if (aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_PRIVATE_MODE_CHANGE) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not this event, return"); return; } @@ -240,7 +240,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) return; } - auto it = aniCallBack_.find(EVENT_PRIVATE_MODE_CHANGE); + auto it = aniCallback_.find(EVENT_PRIVATE_MODE_CHANGE); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, hasPrivate] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", @@ -263,12 +263,12 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged not register!"); return; } - if (aniCallBack_.find(EVENT_FOLD_STATUS_CHANGED) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_FOLD_STATUS_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged not this event, return"); return; } @@ -276,7 +276,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) TLOGE(WmsLogTag::DMS, "[ANI] OnCreate: env is nullptr"); return; } - auto it = aniCallBack_.find(EVENT_FOLD_STATUS_CHANGED); + auto it = aniCallback_.find(EVENT_FOLD_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldStatus] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldStatusCallback", @@ -298,17 +298,17 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not register!"); return; } - if (aniCallBack_.find(EVENT_FOLD_ANGLE_CHANGED) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_FOLD_ANGLE_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_FOLD_ANGLE_CHANGED); + auto it = aniCallback_.find(EVENT_FOLD_ANGLE_CHANGED); ani_array_double cbArray; DisplayAniUtils::CreateAniArrayDouble(env_, foldAngles.size(), &cbArray, foldAngles); for (auto oneAniCallback : it->second) { @@ -335,17 +335,17 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not register!"); return; } - if (aniCallBack_.find(EVENT_CAPTURE_STATUS_CHANGED) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_CAPTURE_STATUS_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_CAPTURE_STATUS_CHANGED); + auto it = aniCallback_.find(EVENT_CAPTURE_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, isCapture] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", @@ -371,17 +371,17 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged not register!"); return; } - if (aniCallBack_.find(EVENT_DISPLAY_MODE_CHANGED) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_DISPLAY_MODE_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_DISPLAY_MODE_CHANGED); + auto it = aniCallback_.find(EVENT_DISPLAY_MODE_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldDisplayMode] () { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldDisplayModeCallback", @@ -406,17 +406,17 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) TLOGE(WmsLogTag::DMS, "[ANI] this listener or env is nullptr"); return; } - std::lock_guard lock(aniCallBackMtx_); - if (aniCallBack_.empty()) { + std::lock_guard lock(aniCallbackMtx_); + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not register!"); return; } - if (aniCallBack_.find(EVENT_AVAILABLE_AREA_CHANGED) == aniCallBack_.end()) { + if (aniCallback_.find(EVENT_AVAILABLE_AREA_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallBack_.find(EVENT_AVAILABLE_AREA_CHANGED); + auto it = aniCallback_.find(EVENT_AVAILABLE_AREA_CHANGED); for (auto oneAniCallback : it->second) { ani_object rectObj = nullptr; DisplayAniUtils::ConvertRect(area, rectObj, env_); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h index 4742074679..d5f339f080 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h @@ -42,7 +42,7 @@ public: private: ani_env* env_; std::mutex mtx_; - std::map> aniCallBack_; + std::map> aniCallback_; wptr weakRef_; std::shared_ptr eventHandler_ = nullptr; }; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index b3cf5c149f..2a312c36a0 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -46,20 +46,20 @@ void ScreenAniListener::AddCallback(const std::string& type, ani_ref callback) TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); return; }; - aniCallBack_[type].emplace_back(cbRef); - TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallBack_ size: %{public}u!", - static_cast(aniCallBack_[type].size())); + aniCallback_[type].emplace_back(cbRef); + TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallback_ size: %{public}u!", + static_cast(aniCallback_[type].size())); } void ScreenAniListener::RemoveAllCallback() { std::lock_guard lock(mtx_); - aniCallBack_.clear(); + aniCallback_.clear(); } void ScreenAniListener::RemoveCallback(ani_env* env, const std::string& type, ani_ref callback) { std::lock_guard lock(mtx_); - auto it = aniCallBack_.find(type); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(type); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Listener no callback to remove"); return; } @@ -85,12 +85,12 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] this listener is nullptr"); return; } - if (aniCallBack_.empty()) { + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not register!"); return; } - auto it = aniCallBack_.find(EVENT_CONNECT); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_CONNECT); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not this event, return"); return; } @@ -134,12 +134,12 @@ void ScreenAniListener::OnDisconnect(ScreenId id) return; } TLOGI(WmsLogTag::DMS, "[ANI] OnDisconnect is called, displayId: %{public}" PRIu64, id); - if (aniCallBack_.empty()) { + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not register!"); return; } - auto it = aniCallBack_.find(EVENT_DISCONNECT); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_DISCONNECT); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not this event, return"); return; } @@ -185,12 +185,12 @@ void ScreenAniListener::OnChange(ScreenId id) return; } TLOGI(WmsLogTag::DMS, "[ANI] OnChange is called, displayId: %{public}" PRIu64, id); - if (aniCallBack_.empty()) { + if (aniCallback_.empty()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); return; } - auto it = aniCallBack_.find(EVENT_CHANGE); - if (it == aniCallBack_.end()) { + auto it = aniCallback_.find(EVENT_CHANGE); + if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not this event, return"); return; } -- Gitee From 0c47ffe9de186bc63921f6d6e9366df2b5b37ace Mon Sep 17 00:00:00 2001 From: wangzilin Date: Wed, 23 Jul 2025 11:58:32 +0800 Subject: [PATCH 026/109] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_register_manager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 3c9250e409..c543a2af54 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -569,8 +569,9 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } - env->GlobalReference_Delete(it->second->GetAniCallBack()); + auto temp = it->second->GetAniCallBack(); it->second->SetAniCallBack(nullptr); + env->GlobalReference_Delete(temp); jsCbMap_[type].erase(it++); } } else { @@ -588,8 +589,9 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } - env->GlobalReference_Delete(it->second->GetAniCallBack()); + auto temp = it->second->GetAniCallBack(); it->second->SetAniCallBack(nullptr); + env->GlobalReference_Delete(temp); jsCbMap_[type].erase(it); break; } -- Gitee From 667789db3dcd267dcd2b56060f6470d8a47955f2 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Wed, 23 Jul 2025 10:56:30 +0800 Subject: [PATCH 027/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/src/display_ani_listener.cpp | 38 +++++++++---------- .../screen_ani/src/screen_ani_listener.cpp | 12 +++--- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 6b57b6a95c..ab02c2e298 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -38,7 +38,7 @@ void DisplayAniListener::AddCallback(const std::string& type, ani_ref callback) { TLOGI(WmsLogTag::DMS, "[ANI] AddCallback is called, type = %{public}s", type.c_str()); if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "env_ nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env nullptr"); return; } std::lock_guard lock(aniCallbackMtx_); @@ -103,7 +103,7 @@ void DisplayAniListener::OnCreate(DisplayId id) // find callbacks in vector for (ani_ref oneAniCallback : vec) { if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; @@ -119,7 +119,7 @@ void DisplayAniListener::OnCreate(DisplayId id) nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, @@ -150,7 +150,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) // find callbacks in vector for (ani_ref oneAniCallback : vec) { if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "OnDestroy: null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; @@ -166,7 +166,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, @@ -194,7 +194,7 @@ void DisplayAniListener::OnChange(DisplayId id) std::vector vec = it->second; for (auto oneAniCallback : vec) { if (env_ == nullptr) { - TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; @@ -210,7 +210,7 @@ void DisplayAniListener::OnChange(DisplayId id) nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniWindowListener::SizeChangeCallBack", 0, @@ -236,7 +236,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) return; } if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); return; } @@ -247,7 +247,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) nullptr, oneAniCallback, hasPrivate); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::PrivateWindowCallback", 0, @@ -273,7 +273,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) return; } if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "[ANI] OnCreate: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); return; } auto it = aniCallback_.find(EVENT_FOLD_STATUS_CHANGED); @@ -283,7 +283,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) nullptr, oneAniCallback, static_cast(foldStatus)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldStatusChangedCallback", 0, @@ -317,14 +317,14 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) nullptr, oneAniCallback, cbArray); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::FoldAngleChangeCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } else { - TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); } } void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) @@ -352,14 +352,14 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) nullptr, oneAniCallback, isCapture); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::CaptureStatusChangedCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } else { - TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); } } void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) @@ -388,14 +388,14 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) nullptr, oneAniCallback, static_cast(foldDisplayMode)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::DisplayModeChangedCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } else { - TLOGE(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); } } void DisplayAniListener::OnAvailableAreaChanged(DMRect area) @@ -425,14 +425,14 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) nullptr, oneAniCallback, rectObj); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniDisplayListener::AvailableAreaChangedCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } else { - TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged: env is nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 2a312c36a0..813df035f4 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -37,7 +37,7 @@ void ScreenAniListener::AddCallback(const std::string& type, ani_ref callback) { TLOGI(WmsLogTag::DMS, "[ANI] AddCallback is called, type = %{public}s", type.c_str()); if (env_ == nullptr) { - TLOGE(WmsLogTag::DMS, "env_ nullptr"); + TLOGE(WmsLogTag::DMS, "[ANI] env nullptr"); return; } std::lock_guard lock(mtx_); @@ -99,7 +99,7 @@ void ScreenAniListener::OnConnect(ScreenId id) // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { - TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; @@ -117,7 +117,7 @@ void ScreenAniListener::OnConnect(ScreenId id) "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniScreenListener::ConnectCallBack", 0, @@ -148,7 +148,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { - TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; @@ -166,7 +166,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { - TLOGE(WmsLogTag::DMS, "get main event handler failed!"); + TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } eventHandler_->PostTask(task, "dms:AniScreenListener::DisconnectCallBack", 0, @@ -199,7 +199,7 @@ void ScreenAniListener::OnChange(ScreenId id) // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { - TLOGI(WmsLogTag::DMS, "OnDestroy: null env_"); + TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } ani_boolean undefRes; -- Gitee From 87545b727e83640ca149dc16c1761843a0ea1612 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Wed, 23 Jul 2025 14:52:36 +0800 Subject: [PATCH 028/109] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_register_manager.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index c543a2af54..3c9250e409 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -569,9 +569,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } - auto temp = it->second->GetAniCallBack(); + env->GlobalReference_Delete(it->second->GetAniCallBack()); it->second->SetAniCallBack(nullptr); - env->GlobalReference_Delete(temp); jsCbMap_[type].erase(it++); } } else { @@ -589,9 +588,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } - auto temp = it->second->GetAniCallBack(); + env->GlobalReference_Delete(it->second->GetAniCallBack()); it->second->SetAniCallBack(nullptr); - env->GlobalReference_Delete(temp); jsCbMap_[type].erase(it); break; } -- Gitee From 7ce947e0b9c62c4880725cb2783adf9fc62b22a8 Mon Sep 17 00:00:00 2001 From: tanliang Date: Wed, 23 Jul 2025 11:20:24 +0800 Subject: [PATCH 029/109] fix on windowStageEvent Signed-off-by: tanliang --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 5 +++++ .../window_runtime/window_stage_ani/src/ani_err_utils.cpp | 2 +- .../window_stage_ani/src/ani_window_listener.cpp | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c2eabec758..2c8c11fadb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -3103,6 +3103,11 @@ function runWindowEventCallBack(cb: object, cbArg: int): void { func(cbArg as WindowEventType); } +function runWindowStageEventCallBack(cb: object, cbArg: int): void { + const func = cb as (cbArg: WindowStageEventType) => void; + func(cbArg as WindowStageEventType); +} + function runWindowTouchOutCallback(cb: object): void { const func = cb as () => void; func(); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp index cb0398266f..cc99f83c70 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp @@ -234,7 +234,7 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index a54456fbd3..b2d84e30ec 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -121,14 +121,15 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT void AniWindowListener::LifeCycleCallBack(LifeCycleEventType eventType) { TLOGI(WmsLogTag::DEFAULT, "[ANI]LifeCycleCallBack, envent type: %{public}u", eventType); - auto task = [self = weakRef_, eventType, eng = env_] () { + auto task = [self = weakRef_, eventType, caseType = caseType_, eng = env_] () { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::LifeCycleCallBack"); auto thisListener = self.promote(); if (thisListener == nullptr || eng == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener or eng is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowEventCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", + caseType == CaseType::CASE_STAGE ? "runWindowStageEventCallBack" : "runWindowEventCallBack", nullptr, thisListener->aniCallBack_, static_cast(eventType)); }; if (!eventHandler_) { -- Gitee From bb80fb234c429f710a1b69eefd0c1e0908ecb3b3 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Wed, 23 Jul 2025 18:08:52 +0800 Subject: [PATCH 030/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/src/display_ani_listener.cpp | 34 +++++++++---------- .../screen_ani/include/screen_ani_listener.h | 2 +- .../screen_ani/src/screen_ani_listener.cpp | 30 ++++++++-------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index ab02c2e298..7178d01839 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -99,22 +99,22 @@ void DisplayAniListener::OnCreate(DisplayId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (ani_ref oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes || nullRes) { + if (undefRes != 0 || nullRes != 0) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); continue; } - auto task = [env = env_, oneAniCallback, id] () { + auto task = [env = env_, oneAniCallback, id] { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; @@ -122,7 +122,7 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } - eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, + eventHandler_->PostTask(std::move(task), "dms:AniDisplayListener::CreateCallBack", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } @@ -146,22 +146,22 @@ void DisplayAniListener::OnDestroy(DisplayId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (ani_ref oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes || nullRes) { + if (undefRes != 0 || nullRes != 0) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); continue; } - auto task = [env = env_, oneAniCallback, id] () { + auto task = [env = env_, oneAniCallback, id] { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; @@ -169,7 +169,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } - eventHandler_->PostTask(task, "dms:AniDisplayListener::CreateCallBack", 0, + eventHandler_->PostTask(std::move(task), "dms:AniDisplayListener::CreateCallBack", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } @@ -197,15 +197,15 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes || nullRes) { + if (undefRes != 0 || nullRes != 0) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); continue; } - auto task = [env = env_, oneAniCallback, id] () { + auto task = [env = env_, oneAniCallback, id] { DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; @@ -213,7 +213,7 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } - eventHandler_->PostTask(task, "dms:AniWindowListener::SizeChangeCallBack", 0, + eventHandler_->PostTask(std::move(task), "dms:AniWindowListener::SizeChangeCallBack", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h index d5f339f080..9555a91199 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h @@ -17,9 +17,9 @@ #define OHOS_ANI_SCREEN_LISTENER_H #include -#include "screen_manager.h" #include "ani.h" #include "event_handler.h" +#include "screen_manager.h" #include "refbase.h" namespace OHOS { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 813df035f4..945efbefbd 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -95,24 +95,24 @@ void ScreenAniListener::OnConnect(ScreenId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes || nullRes) { + if (undefRes != 0 || nullRes != 0) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); continue; } - auto task = [env = env_, oneAniCallback, id] () { + auto task = [env = env_, oneAniCallback, id] { ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; @@ -120,7 +120,7 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } - eventHandler_->PostTask(task, "dms:AniScreenListener::ConnectCallBack", 0, + eventHandler_->PostTask(std::move(task), "dms:AniScreenListener::ConnectCallBack", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } @@ -144,24 +144,24 @@ void ScreenAniListener::OnDisconnect(ScreenId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes || nullRes) { + if (undefRes != 0 || nullRes != 0) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); continue; } - auto task = [env = env_, oneAniCallback, id] () { + auto task = [env = env_, oneAniCallback, id] { ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); }; @@ -169,7 +169,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); return; } - eventHandler_->PostTask(task, "dms:AniScreenListener::DisconnectCallBack", 0, + eventHandler_->PostTask(std::move(task), "dms:AniScreenListener::DisconnectCallBack", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } } @@ -195,15 +195,15 @@ void ScreenAniListener::OnChange(ScreenId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", (int)vec.size()); + TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; - ani_boolean nullRes; + ani_boolean undefRes = 0; + ani_boolean nullRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined -- Gitee From a60e6c899d98c399f9c8b54f5f91f966c17ed27a Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Thu, 24 Jul 2025 07:01:04 +0000 Subject: [PATCH 031/109] update interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp. Signed-off-by: chuanstudy --- .../src/ani_embeddable_window_stage_module.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp index 84fc95cd06..58d5f9ac21 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * 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 -- Gitee From d9596d359f65609e6c63f029d9defcafbcecf792 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Thu, 24 Jul 2025 08:19:23 +0000 Subject: [PATCH 032/109] update interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets. Signed-off-by: chuanstudy --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index ee8a6c12e1..66dc893192 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2949,7 +2949,7 @@ native function minimizeAllSync(nativeObj: long, id: long): void; native function findWindowSync(nativeObj: long, name: string): Window; native function onSync(nativeObj: long, type: string, callback: object): void; native function offSync(nativeObj: long, type: string, callback?: object): void; -native function shiftAppWindowFocusSync(nativeObj: long, sourceWindowId: number, targetWindowId: number): void; +native function shiftAppWindowFocusSync(nativeObj: long, sourceWindowId: int, targetWindowId: int): void; native function createWindowSync(nativeObj: long, config: Configuration): Window; export function getLastWindow(ctx: BaseContext): Promise { @@ -3091,7 +3091,7 @@ function runAvoidAreaChangeCallBack(cb: object, area: object, type: int): void { func({type: type as AvoidAreaType, area: area as AvoidArea}); } -export function shiftAppWindowFocus(sourceWindowId: number, targetWindowId: number): Promise { +export function shiftAppWindowFocus(sourceWindowId: int, targetWindowId: int): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) : void => { taskpool.execute((): void => { return shiftAppWindowFocusSync(nativeObj, sourceWindowId, targetWindowId); -- Gitee From e11001609fbeefeb6f9145bac88f6e13b1f0b7ee Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Thu, 24 Jul 2025 08:20:12 +0000 Subject: [PATCH 033/109] update interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h. Signed-off-by: chuanstudy --- .../window_stage_ani/include/ani_window_manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h index 47c270f1e0..14e2e6285f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h @@ -42,14 +42,14 @@ public: static void RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, - ani_double sourceWindowId, ani_double targetWindowId); + ani_int sourceWindowId, ani_int targetWindowId); private: ani_object OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam); ani_ref OnGetLastWindow(ani_env* env, ani_object context); ani_ref OnFindWindow(ani_env* env, ani_string windowName); ani_ref OnCreateWindow(ani_env* env, ani_object configuration); void OnMinimizeAll(ani_env* env, ani_long displayId); - void OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId); + void OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowId, ani_int targetWindowId); ani_object GetTopWindowTask(ani_env* env, void* contextPtr, bool newApi); void OnRegisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback); void OnUnregisterWindowManagerCallback(ani_env* env, ani_string type, ani_ref callback); -- Gitee From f89ea35869a210a57896c1dc149c48ed2e5e4662 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Thu, 24 Jul 2025 08:21:24 +0000 Subject: [PATCH 034/109] update interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp. Signed-off-by: chuanstudy --- .../window_stage_ani/src/ani_window_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 0504d30eeb..65a80e9afb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -66,7 +66,7 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) "JLstd/core/String;:L@ohos/window/window/Window;", reinterpret_cast(AniWindowManager::FindWindow)}, ani_native_function {"minimizeAllSync", "JJ:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, - ani_native_function {"shiftAppWindowFocusSync", "JDD:V", + ani_native_function {"shiftAppWindowFocusSync", "JII:V", reinterpret_cast(AniWindowManager::ShiftAppWindowFocus)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindowManager::RegisterWindowManagerCallback)}, @@ -427,14 +427,14 @@ void AniWindowManager::OnUnregisterWindowManagerCallback(ani_env* env, ani_strin } void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, - ani_double sourceWindowId, ani_double targetWindowId) + ani_int sourceWindowId, ani_int targetWindowId) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); } -void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId) +void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowId, ani_int targetWindowId) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( -- Gitee From 2f142c5c51a0e86c1b0c114146ee387875a98b6a Mon Sep 17 00:00:00 2001 From: travislgd Date: Thu, 24 Jul 2025 20:21:59 +0800 Subject: [PATCH 035/109] dms on ani fix Signed-off-by: travislgd --- .../kits/ani/display_runtime/display_ani/ets/@ohos.display.ets | 2 +- .../kits/ani/display_runtime/display_ani/src/display_ani.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 7b62fbe64a..8cf431404d 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -334,7 +334,7 @@ export class DisplayImpl implements Display { } off(type: string, callback?: Callback): void { - this.syncOff(type, callback as object); + this.syncOff(type, callback); } native syncOn(type: string, callback: object): void; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 587e58bb38..5ea5565237 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -199,7 +199,7 @@ void DisplayAni::UnRegisterCallback(ani_env* env, ani_object obj, ani_string typ { TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_long displayRef; - env->Object_GetFieldByName_Long(obj, "displayRef", &displayRef); + env->Object_GetFieldByName_Long(obj, "displayRef", &displayRef); DisplayAni* displayAni = reinterpret_cast(displayRef); if (displayAni != nullptr) { displayAni->OnUnRegisterCallback(env, obj, type, callback); -- Gitee From 7a50696aeed7be29891680328e78d58b4e1470ff Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 20:37:17 +0800 Subject: [PATCH 036/109] =?UTF-8?q?1.number=E8=BD=ACint=EF=BC=9B2=E3=80=81?= =?UTF-8?q?GetWindowProperties=20get=20id=E3=80=81name=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E5=90=8D=E7=A7=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangzilin --- .../window_stage_ani/ets/@ohos.window.ets | 67 +++++++++++-------- .../include/ani_window_register_manager.h | 4 +- .../include/ani_window_utils.h | 8 ++- .../window_stage_ani/src/ani_window_utils.cpp | 29 ++++++-- 4 files changed, 68 insertions(+), 40 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index ee8a6c12e1..d7e44498df 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -404,12 +404,12 @@ namespace window { /** * Id of display * - * @type { number } + * @type { long } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi Hide this for inner system use. * @since 8 */ - displayId: number; + displayId: long; /** * Region tint of systembar * @@ -422,7 +422,7 @@ namespace window { } export class SystemBarTintStateInternal implements SystemBarTintState { - displayId: number; + displayId: long; regionTint: Array; } @@ -983,7 +983,7 @@ export interface WindowProperties { /** * Brightness value of window. * - * @type { number } + * @type { double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @since 10 @@ -991,13 +991,13 @@ export interface WindowProperties { /** * Brightness value of window. * - * @type { number } + * @type { double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - brightness: number; + brightness: double; /** * The dimbehind value of window. @@ -1081,29 +1081,39 @@ export interface WindowProperties { /** * Window id. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @since 9 */ /** * Window id. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @atomicservice * @since 12 */ - id: number; + id: int; /** * display id. * - * @type { ?number } + * @type { ?long } * @syscap SystemCapability.WindowManager.WindowManager.Core * @atomicservice * @since 12 */ - displayId: number; + displayId?: long; + + /** + * window name. + * + * @type { ?string } + * @syscap SystemCapability.WindowManager.WindowManager.Core + * @atomicservice + * @since 18 + */ + name?: string; } export class WindowPropertiesInternal implements WindowProperties { @@ -1114,15 +1124,16 @@ export class WindowPropertiesInternal implements WindowProperties { isLayoutFullScreen: boolean; focusable: boolean; touchable: boolean; - brightness: number; + brightness: double; dimBehindValue: number; isKeepScreenOn: boolean; isPrivacyMode: boolean; isRoundCorner: boolean; isTransparent: boolean; - id: number; - displayId: number; + id: int; + displayId: long; typeInternal: int; + name: string; } /** @@ -1201,12 +1212,12 @@ export interface Configuration { /** * Indicates display ID. * - * @type { ?number } + * @type { ?long } * @syscap SystemCapability.WindowManager.WindowManager.Core * @atomicservice * @since 12 */ - displayId?: number; + displayId?: long; /** * Indicates Parent window id @@ -1250,7 +1261,7 @@ export class ConfigurationInternal implements Configuration { name: string; windowType: WindowType; ctx?: BaseContext; - displayId?: number; + displayId?: long; parentId?: int; decorEnabled?: boolean; title?: string; @@ -1261,9 +1272,9 @@ export interface MoveConfiguration { } export interface WindowDensityInfo { - systemDensity: number; - defaultDensity: number; - customDensity: number; + systemDensity: double; + defaultDensity: double; + customDensity: double; } export interface AvoidAreaOptions { @@ -1982,7 +1993,7 @@ export class WindowInternal implements Window { private native setWindowFocusableSync(nativeObj: long, isFocusable: boolean): void; private native setWindowTouchableSync(nativeObj: long, isTouchable: boolean): void; - private native onNoInteractionDetected(nativeObj: long, type: string, timeout: number, callback: Object): void; + private native onNoInteractionDetected(nativeObj: long, type: string, timeout: long, callback: Object): void; private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; @@ -2736,7 +2747,7 @@ export class WindowInternal implements Window { this.onSync(this.nativeObj, type, callback); } - public on(type: 'noInteractionDetected', timeout: number, callback: Callback): void { + public on(type: 'noInteractionDetected', timeout: long, callback: Callback): void { this.onNoInteractionDetected(this.nativeObj, type, timeout, callback as WindowVoidCallback); } @@ -3071,14 +3082,14 @@ function runWindowListenerBooleanArgCallBack(cb: object, cbArg: boolean): void { func(cbArg); } -function runSystemDensityChangeCallback(cb: object, density: number): void { - const func = cb as (density: number) => void; - func(density as number); +function runSystemDensityChangeCallback(cb: object, density: double): void { + const func = cb as (density: double) => void; + func(density as double); } -function runDisplayIdChangeCallback(cb: object, displayId: number): void { - const func = cb as (displayId: number) => void; - func(displayId as number); +function runDisplayIdChangeCallback(cb: object, displayId: long): void { + const func = cb as (displayId: long) => void; + func(displayId as long); } function runSystemBarTintChangeCallBack(cb: object, tint: object): void { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 0e99c1336b..11fb377d50 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -93,9 +93,9 @@ private: sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowVisibilityChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); - WmErrorCode ProcessSystemDensityChangeRegister(sptr listner, sptr window, + WmErrorCode ProcessSystemDensityChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); - WmErrorCode ProcessDisplayIdChangeRegister(sptr listner, sptr window, + WmErrorCode ProcessDisplayIdChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowNoInteractionRegister(sptr listener, sptr window, bool isRegister, ani_env* env, ani_double timeout); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 83dd3133f8..eed09e859c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -342,13 +342,15 @@ private: ani_object& systemProperties, const char* clsName); static void SetSystemPropertiesWindowIsTransparent(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); - static void SetSystemPropertieswindowIsRoundCorner(ani_env* env, const sptr& window, + static void SetSystemPropertiesWindowIsRoundCorner(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); static void SetSystemPropertiesWindowDimBehindValue(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); - static void SetSystemPropertieswindowId(ani_env* env, const sptr& window, + static void SetSystemPropertiesWindowId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); - static void SetSystemPropertiesdisplayId(ani_env* env, const sptr& window, + static void SetSystemPropertiesDisplayId(ani_env* env, const sptr& window, + ani_object& systemProperties, const char* clsName); + static void SetSystemPropertiesWindowName(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); }; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index cb13080aea..56866ca4cf 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -697,7 +697,7 @@ void AniWindowUtils::SetSystemPropertiesWindowIsTransparent(ani_env* env, const } -void AniWindowUtils::SetSystemPropertieswindowIsRoundCorner(ani_env* env, const sptr& window, +void AniWindowUtils::SetSystemPropertiesWindowIsRoundCorner(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -717,7 +717,7 @@ void AniWindowUtils::SetSystemPropertiesWindowDimBehindValue(ani_env* env, const } -void AniWindowUtils::SetSystemPropertieswindowId(ani_env* env, const sptr& window, +void AniWindowUtils::SetSystemPropertiesWindowId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -726,13 +726,28 @@ void AniWindowUtils::SetSystemPropertieswindowId(ani_env* env, const sptr(windowId)); } -void AniWindowUtils::SetSystemPropertiesdisplayId(ani_env* env, const sptr& window, +void AniWindowUtils::SetSystemPropertiesDisplayId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); uint32_t displayId = window->GetDisplayId(); CallAniMethodVoid(env, systemProperties, clsName, "displayId", nullptr, - static_cast(displayId)); + static_cast(displayId)); +} + +void AniWindowUtils::SetSystemPropertiesWindowName(ani_env* env, const sptr& window, + ani_object& systemProperties, const char* clsName) +{ + WindowPropertyInfo WindowPropertyInfo; + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + std::string windowName = window->GetWindowName(); + ani_string aniWindowName; + if (ANI_OK != GetAniString(env, windowName, &aniWindowName)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get ANI string failed"); + return; + } + CallAniMethodVoid(env, systemProperties, clsName, "name", nullptr, + static_cast(aniWindowName)); } ani_object AniWindowUtils::CreateWindowsProperties(ani_env* env, const sptr& window) @@ -758,10 +773,10 @@ ani_object AniWindowUtils::CreateWindowsProperties(ani_env* env, const sptrGetWindowId(), window->GetWindowName().c_str()); -- Gitee From 663151fad022cbd1f3d8f00ef11dced86a0229c6 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 20:51:40 +0800 Subject: [PATCH 037/109] =?UTF-8?q?=E5=90=8D=E5=AD=97=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangzilin --- .../include/ani_window_listener.h | 8 +- .../src/ani_window_listener.cpp | 82 +++++++++---------- .../src/ani_window_register_manager.cpp | 2 +- .../window_stage_ani/src/ani_window_utils.cpp | 6 +- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 92cee2a94a..3b575088fb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -81,11 +81,11 @@ class AniWindowListener : public IWindowChangeListener, public IDisplayIdChangeListener { public: AniWindowListener(ani_env* env, ani_ref callback, CaseType caseType) - : env_(env), aniCallBack_(callback), caseType_(caseType), + : env_(env), aniCallback_(callback), caseType_(caseType), weakRef_(wptr (this)) {} ~AniWindowListener(); - ani_ref GetAniCallBack() const { return aniCallBack_; } - void SetAniCallBack(ani_ref aniCallBack) { aniCallBack_ = aniCallBack; } + ani_ref GetAniCallback() const { return aniCallback_; } + void SetAniCallback(ani_ref aniCallback) { aniCallback_ = aniCallback; } void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) override; void OnSizeChange(Rect rect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr) override; @@ -132,7 +132,7 @@ private: void LifeCycleCallBack(LifeCycleEventType eventType); int64_t noInteractionTimeout_ = 0; ani_env* env_ = nullptr; - ani_ref aniCallBack_; + ani_ref aniCallback_; CaseType caseType_ = CaseType::CASE_WINDOW; wptr weakRef_ = nullptr; std::shared_ptr eventHandler_ = nullptr; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 9e3730521b..82d1500927 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -27,7 +27,7 @@ using namespace AbilityRuntime; AniWindowListener::~AniWindowListener() { - ani_status ret = env_->GlobalReference_Delete(aniCallBack_); + ani_status ret = env_->GlobalReference_Delete(aniCallback_); TLOGI(WmsLogTag::DEFAULT, "[ANI]~AniWindowListener ret:%{public}d", static_cast(ret)); } @@ -58,12 +58,12 @@ void AniWindowListener::OnSizeChange(Rect rect, WindowSizeChangeReason reason, auto task = [self = weakRef_, rect, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowSizeCallBack", - nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniSize(eng, rect.width_, rect.height_)); + nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSize(eng, rect.width_, rect.height_)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -82,12 +82,12 @@ void AniWindowListener::OnSystemBarPropertyChange(DisplayId displayId, const Sys TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, displayId, tints] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallBack", - nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniSystemBarTintState(eng, displayId, tints)); + nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSystemBarTintState(eng, displayId, tints)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -103,13 +103,13 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT auto task = [self = weakRef_, eng = env_, avoidArea, type] { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnAvoidAreaChanged"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, type); AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallBack", - nullptr, thisListener->aniCallBack_, nativeAvoidArea, static_cast(type)); + nullptr, thisListener->aniCallback_, nativeAvoidArea, static_cast(type)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -124,12 +124,12 @@ void AniWindowListener::OnSystemDensityChanged(float density) auto task = [self = weakRef_, density, eng = env_] { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnSystemDensityChanged"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemDensityChangeCallback", - nullptr, thisListener->aniCallBack_, static_cast(density)); + nullptr, thisListener->aniCallback_, static_cast(density)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -144,12 +144,12 @@ void AniWindowListener::OnDisplayIdChanged(DisplayId displayId) auto task = [self = weakRef_, displayId, eng = env_] { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnDisplayIdChanged"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runDisplayIdChangeCallback", - nullptr, thisListener->aniCallBack_, static_cast(displayId)); + nullptr, thisListener->aniCallback_, static_cast(displayId)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -164,13 +164,13 @@ void AniWindowListener::LifeCycleCallBack(LifeCycleEventType eventType) auto task = [self = weakRef_, eventType, caseType = caseType_, eng = env_] () { HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::LifeCycleCallBack"); auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", caseType == CaseType::CASE_STAGE ? "runWindowStageEventCallBack" : "runWindowEventCallBack", - nullptr, thisListener->aniCallBack_, static_cast(eventType)); + nullptr, thisListener->aniCallback_, static_cast(eventType)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -240,12 +240,12 @@ void AniWindowListener::OnSizeChange(const sptr& info, info->rect_.posX_, info->rect_.posY_, info->rect_.width_, info->rect_.height_); // callback should run in js thread auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallBack", - nullptr, thisListener->aniCallBack_, static_cast(info->rect_.height_)); + nullptr, thisListener->aniCallback_, static_cast(info->rect_.height_)); } void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanelInfo) @@ -255,12 +255,12 @@ void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanel keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallBack", - nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); + nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanelInfo) @@ -270,12 +270,12 @@ void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanel keyboardPanelInfo.rect_.posX_, keyboardPanelInfo.rect_.posY_, keyboardPanelInfo.rect_.width_, keyboardPanelInfo.rect_.height_); auto thisListener = weakRef_.promote(); - if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || env_ == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallBack", - nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); + nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } void AniWindowListener::OnTouchOutside() const @@ -283,12 +283,12 @@ void AniWindowListener::OnTouchOutside() const TLOGI(WmsLogTag::DEFAULT, "[ANI] touchoutside"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowTouchOutCallback", - nullptr, thisListener->aniCallBack_); + nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -303,12 +303,12 @@ void AniWindowListener::OnScreenshot() TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallBack", - nullptr, thisListener->aniCallBack_); + nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -322,12 +322,12 @@ void AniWindowListener::OnDialogTargetTouch() const TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowDialogTargetCallback", - nullptr, thisListener->aniCallBack_); + nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -346,12 +346,12 @@ void AniWindowListener::OnGestureNavigationEnabledUpdate(bool enable) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, enable] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", - nullptr, thisListener->aniCallBack_, ani_boolean(enable)); + nullptr, thisListener->aniCallback_, ani_boolean(enable)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -365,12 +365,12 @@ void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, showWaterMark] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", - nullptr, thisListener->aniCallBack_, ani_boolean(showWaterMark)); + nullptr, thisListener->aniCallback_, ani_boolean(showWaterMark)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -394,12 +394,12 @@ void AniWindowListener::OnWindowNoInteractionCallback() TLOGI(WmsLogTag::DEFAULT, "[ANI] diaglogtargettouch"); auto task = [self = weakRef_, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowNoInteractionCallback", - nullptr, thisListener->aniCallBack_); + nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -414,12 +414,12 @@ void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) TLOGI(WmsLogTag::DEFAULT, "[ANI] windowstatus: %{public}u", windowstatus); auto task = [self = weakRef_, windowstatus, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowStatusCallBack", - nullptr, thisListener->aniCallBack_, static_cast(windowstatus)); + nullptr, thisListener->aniCallback_, static_cast(windowstatus)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -434,12 +434,12 @@ void AniWindowListener::OnWindowVisibilityChangedCallback(const bool isVisible) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, isVisible] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", - nullptr, thisListener->aniCallBack_, ani_boolean(isVisible)); + nullptr, thisListener->aniCallback_, ani_boolean(isVisible)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -453,12 +453,12 @@ void AniWindowListener::OnWindowHighlightChange(bool isHighlight) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto task = [self = weakRef_, eng = env_, isHighlight] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", - nullptr, thisListener->aniCallBack_, ani_boolean(isHighlight)); + nullptr, thisListener->aniCallback_, ani_boolean(isHighlight)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); @@ -490,12 +490,12 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) } auto task = [self = weakRef_, rect, reason, eng = env_] () { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowRectCallback", - nullptr, thisListener->aniCallBack_, AniWindowUtils::CreateAniRect(eng, rect), + nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniRect(eng, rect), static_cast(reason)); }; if (!eventHandler_) { @@ -517,12 +517,12 @@ void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) TLOGI(WmsLogTag::WMS_SUB, "[ANI]"); auto task = [self = weakRef_, eng = env_, terminateCloseProcess] { auto thisListener = self.promote(); - if (thisListener == nullptr || eng == nullptr || thisListener->aniCallBack_ == nullptr) { + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::WMS_SUB, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", - nullptr, thisListener->aniCallBack_, ani_boolean(terminateCloseProcess)); + nullptr, thisListener->aniCallback_, ani_boolean(terminateCloseProcess)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 3c9250e409..ef3a3a9af0 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -569,7 +569,7 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed, no value", type.c_str()); return ret; } - env->GlobalReference_Delete(it->second->GetAniCallBack()); + env->GlobalReference_Delete(it->second->GetAniCallback()); it->second->SetAniCallBack(nullptr); jsCbMap_[type].erase(it++); } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 56866ca4cf..87c8cb8dd7 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -516,12 +516,12 @@ ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, ani_status ret = ANI_OK; ani_namespace aniNamespace{}; if ((ret = env->FindNamespace(ns, &aniNamespace)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find ns:%{public}s ret:%{public}d", ns, ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI]cannot find ns:%{public}s ret:%{public}d", ns, ret); return ret; } ani_function func{}; if ((ret = env->Namespace_FindFunction(aniNamespace, fn, signature, &func)) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot find callBack %{public}d", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI]cannot find callback %{public}d", ret); return ret; } va_list args; @@ -529,7 +529,7 @@ ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, ret = env->Function_Call_Void_V(func, args); va_end(args); if (ret != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]canot run callBack %{public}d", ret); + TLOGE(WmsLogTag::DEFAULT, "[ANI]cannot run callback %{public}d", ret); return ret; } return ret; -- Gitee From 70bf9bc9c884441e6dde65b72b57bc4a9c5bd061 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 21:05:13 +0800 Subject: [PATCH 038/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 87c8cb8dd7..58ec4f1cc0 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -776,6 +776,7 @@ ani_object AniWindowUtils::CreateWindowsProperties(ani_env* env, const sptrGetWindowId(), -- Gitee From a987d14d157aad74d8e768fd002fbc1fa3318e25 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 21:06:54 +0800 Subject: [PATCH 039/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index d7e44498df..fde296f17c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1131,9 +1131,9 @@ export class WindowPropertiesInternal implements WindowProperties { isRoundCorner: boolean; isTransparent: boolean; id: int; - displayId: long; + displayId?: long; typeInternal: int; - name: string; + name?: string; } /** -- Gitee From 6bcad6bb11483cca8c2d3122e9c5605902445683 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 21:26:56 +0800 Subject: [PATCH 040/109] CallBack -> Callback callBack -> callback Signed-off-by: wangzilin --- .../ets/@ohos.uiExtensionHost.ets | 2 +- .../include/ani_extension_window_listener.h | 8 +-- .../src/ani_extension_window_listener.cpp | 26 ++++---- .../window_stage_ani/ets/@ohos.window.ets | 22 +++---- .../include/ani_window_listener.h | 2 +- .../src/ani_window_listener.cpp | 60 +++++++++---------- .../src/ani_window_register_manager.cpp | 6 +- 7 files changed, 63 insertions(+), 63 deletions(-) diff --git a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets index dadcbb29c6..15a53bdfe5 100644 --- a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets +++ b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets @@ -35,7 +35,7 @@ namespace uiExtensionHost { const WMS_UIEXT: int = 0xC0420D; const WMS_UIEXT_TAG: string = "WMSUiext"; - function callBack(fn: object, fnArg: object): void { + function callback(fn: object, fnArg: object): void { let f = fn as (d: object) => void; f(fnArg); } diff --git a/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window_listener.h b/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window_listener.h index 4d280abf98..8f7f5dcb89 100644 --- a/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window_listener.h +++ b/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window_listener.h @@ -34,7 +34,7 @@ class AniExtensionWindowListener : public IWindowChangeListener, public IOccupiedAreaChangeListener { public: AniExtensionWindowListener(ani_env* env, ani_ref func, ani_ref data) - : env_(env), callBack_(func), callBackData_(data), weakRef_(wptr (this)) {} + : env_(env), callback_(func), callbackData_(data), weakRef_(wptr (this)) {} ~AniExtensionWindowListener(); void OnSizeChange(Rect rect, WindowSizeChangeReason reason, const std::shared_ptr& rsTransaction = nullptr) override; @@ -47,12 +47,12 @@ public: void SetSizeInfo(uint32_t width, uint32_t height); private: - void CallBack(); + void Callback(); uint32_t currentWidth_ = 0; uint32_t currentHeight_ = 0; ani_env* env_ = nullptr; - ani_ref callBack_; - ani_ref callBackData_; + ani_ref callback_; + ani_ref callbackData_; wptr weakRef_ = nullptr; std::shared_ptr eventHandler_ = nullptr; DEFINE_VAR_DEFAULT_FUNC_SET(bool, IsDeprecatedInterface, isDeprecatedInterface, false) diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp index 96e81d96be..f18a63d88f 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp @@ -34,11 +34,11 @@ const std::string KEYBOARD_HEIGHT_CHANGE_CB = "keyboardHeightChange"; AniExtensionWindowListener::~AniExtensionWindowListener() { - if (callBack_ != nullptr) { - env_->GlobalReference_Delete(callBack_); + if (callback_ != nullptr) { + env_->GlobalReference_Delete(callback_); } - if (callBackData_ != nullptr) { - env_->GlobalReference_Delete(callBackData_); + if (callbackData_ != nullptr) { + env_->GlobalReference_Delete(callbackData_); } TLOGI(WmsLogTag::WMS_UIEXT, "[ANI]~AniExtensionWindowListener"); } @@ -57,7 +57,7 @@ void AniExtensionWindowListener::SetMainEventHandler() eventHandler_ = std::make_shared(mainRunner); } -void AniExtensionWindowListener::CallBack() +void AniExtensionWindowListener::Callback() { ani_status ret {}; ani_function fn {}; @@ -66,12 +66,12 @@ void AniExtensionWindowListener::CallBack() TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot find ns %{public}d", ret); return; } - if ((ret = env_->Namespace_FindFunction(ns, "callBack", "Lstd/core/Object;Lstd/core/Object;:V", &fn)) != ANI_OK) { - TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot find callBack %{public}d", ret); + if ((ret = env_->Namespace_FindFunction(ns, "callback", "Lstd/core/Object;Lstd/core/Object;:V", &fn)) != ANI_OK) { + TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]cannot find callback %{public}d", ret); return; } - if ((ret = env_->Function_Call_Void(fn, callBack_, callBackData_)) != ANI_OK) { - TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot find callBack %{public}d", ret); + if ((ret = env_->Function_Call_Void(fn, callback_, callbackData_)) != ANI_OK) { + TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]cannot find callback %{public}d", ret); return; } } @@ -79,12 +79,12 @@ void AniExtensionWindowListener::CallBack() void AniExtensionWindowListener::SetSizeInfo(uint32_t width, uint32_t height) { ani_status ret {}; - if ((ret = env_->Object_SetFieldByName_Double((ani_object)callBackData_, "width", + if ((ret = env_->Object_SetFieldByName_Double((ani_object)callbackData_, "width", (double)width)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot set width %{public}d", ret); return; }; - if ((ret = env_->Object_SetFieldByName_Double((ani_object)callBackData_, "height", + if ((ret = env_->Object_SetFieldByName_Double((ani_object)callbackData_, "height", (double)height)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot set height %{public}d", ret); return; @@ -108,7 +108,7 @@ void AniExtensionWindowListener::OnSizeChange(Rect rect, WindowSizeChangeReason return; } thisListener->SetSizeInfo(rect.width_, rect.height_); - thisListener->CallBack(); + thisListener->Callback(); }; if (reason == WindowSizeChangeReason::ROTATION) { aniCallback(); @@ -138,7 +138,7 @@ void AniExtensionWindowListener::OnSizeChange(const sptr static_cast(info->type_), info->rect_.posX_, info->rect_.posY_, info->rect_.width_, info->rect_.height_); // js callback should run in js thread - CallBack(); + Callback(); } } // namespace Rosen diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index fde296f17c..39cf81bea1 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -3072,12 +3072,12 @@ export function off(type: string, callback?: Callback): void { offSync(nativeObj, type, callback); } -function runWindowListenerVoidArgCallBack(cb: object): void { +function runWindowListenerVoidArgCallback(cb: object): void { const func = cb as () => void; func(); } -function runWindowListenerBooleanArgCallBack(cb: object, cbArg: boolean): void { +function runWindowListenerBooleanArgCallback(cb: object, cbArg: boolean): void { const func = cb as (cbArg: boolean) => void; func(cbArg); } @@ -3092,12 +3092,12 @@ function runDisplayIdChangeCallback(cb: object, displayId: long): void { func(displayId as long); } -function runSystemBarTintChangeCallBack(cb: object, tint: object): void { +function runSystemBarTintChangeCallback(cb: object, tint: object): void { const func = cb as (tint: SystemBarTintState) => void; func(tint as SystemBarTintState); } -function runAvoidAreaChangeCallBack(cb: object, area: object, type: int): void { +function runAvoidAreaChangeCallback(cb: object, area: object, type: int): void { const func = cb as (data: AvoidAreaOptions) => void; func({type: type as AvoidAreaType, area: area as AvoidArea}); } @@ -3119,12 +3119,12 @@ function runWindowDialogTargetCallback(cb: object): void { func(); } -function runWindowEventCallBack(cb: object, cbArg: int): void { +function runWindowEventCallback(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowEventType) => void; func(cbArg as WindowEventType); } -function runWindowStageEventCallBack(cb: object, cbArg: int): void { +function runWindowStageEventCallback(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowStageEventType) => void; func(cbArg as WindowStageEventType); } @@ -3139,27 +3139,27 @@ function runWindowRectCallback(cb: object, cbArg: object): void { func(cbArg as Rect); } -function runWindowSizeCallBack(cb: object, cbArg: object): void { +function runWindowSizeCallback(cb: object, cbArg: object): void { const func = cb as (cbArg: Size) => void; func(cbArg as Size); } -function runKeyboardHeightChangeCallBack(cb: object, cbArg: number): void { +function runKeyboardHeightChangeCallback(cb: object, cbArg: number): void { const func = cb as (cbArg: number) => void; func(cbArg as number); } -function runKeyboardDidShowCallBack(cb: object, cbArg: object): void { +function runKeyboardDidShowCallback(cb: object, cbArg: object): void { const func = cb as (cbArg: KeyboardInfo) => void; func(cbArg as KeyboardInfo); } -function runKeyboardDidHideCallBack(cb: object, cbArg: object): void { +function runKeyboardDidHideCallback(cb: object, cbArg: object): void { const func = cb as (cbArg: KeyboardInfo) => void; func(cbArg as KeyboardInfo); } -function runWindowStatusCallBack(cb: object, cbArg: int): void { +function runWindowStatusCallback(cb: object, cbArg: int): void { const func = cb as (cbArg: WindowStatusType) => void; func(cbArg as WindowStatusType); } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 3b575088fb..52a4b7aa83 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -129,7 +129,7 @@ private: Rect currRect_ = {0, 0, 0, 0}; WindowState state_ {WindowState::STATE_INITIAL}; - void LifeCycleCallBack(LifeCycleEventType eventType); + void LifeCycleCallback(LifeCycleEventType eventType); int64_t noInteractionTimeout_ = 0; ani_env* env_ = nullptr; ani_ref aniCallback_; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 82d1500927..7b3845a37b 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -62,14 +62,14 @@ void AniWindowListener::OnSizeChange(Rect rect, WindowSizeChangeReason reason, TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowSizeCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowSizeCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSize(eng, rect.width_, rect.height_)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::SizeChangeCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::SizeChangeCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } @@ -86,7 +86,7 @@ void AniWindowListener::OnSystemBarPropertyChange(DisplayId displayId, const Sys TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSystemBarTintState(eng, displayId, tints)); }; if (!eventHandler_) { @@ -108,7 +108,7 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT return; } auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, type); - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallback", nullptr, thisListener->aniCallback_, nativeAvoidArea, static_cast(type)); }; if (!eventHandler_) { @@ -158,32 +158,32 @@ void AniWindowListener::OnDisplayIdChanged(DisplayId displayId) eventHandler_->PostTask(task, __func__, 0, AppExecFwk::EventQueue::Priority::HIGH); } -void AniWindowListener::LifeCycleCallBack(LifeCycleEventType eventType) +void AniWindowListener::LifeCycleCallback(LifeCycleEventType eventType) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]LifeCycleCallBack, envent type: %{public}u", eventType); + TLOGI(WmsLogTag::DEFAULT, "[ANI]LifeCycleCallback, envent type: %{public}u", eventType); auto task = [self = weakRef_, eventType, caseType = caseType_, eng = env_] () { - HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::LifeCycleCallBack"); + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::LifeCycleCallback"); auto thisListener = self.promote(); if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", - caseType == CaseType::CASE_STAGE ? "runWindowStageEventCallBack" : "runWindowEventCallBack", + caseType == CaseType::CASE_STAGE ? "runWindowStageEventCallback" : "runWindowEventCallback", nullptr, thisListener->aniCallback_, static_cast(eventType)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::LifeCycleCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::LifeCycleCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } void AniWindowListener::AfterForeground() { if (state_ == WindowState::STATE_INITIAL || state_ == WindowState::STATE_HIDDEN) { - LifeCycleCallBack(LifeCycleEventType::FOREGROUND); + LifeCycleCallback(LifeCycleEventType::FOREGROUND); state_ = WindowState::STATE_SHOWN; } else { TLOGD(WmsLogTag::DEFAULT, "[ANI]window is already shown"); @@ -193,7 +193,7 @@ void AniWindowListener::AfterForeground() void AniWindowListener::AfterBackground() { if (state_ == WindowState::STATE_INITIAL || state_ == WindowState::STATE_SHOWN) { - LifeCycleCallBack(LifeCycleEventType::BACKGROUND); + LifeCycleCallback(LifeCycleEventType::BACKGROUND); state_ = WindowState::STATE_HIDDEN; } else { TLOGD(WmsLogTag::DEFAULT, "[ANI]window is already hide"); @@ -202,32 +202,32 @@ void AniWindowListener::AfterBackground() void AniWindowListener::AfterFocused() { - LifeCycleCallBack(LifeCycleEventType::ACTIVE); + LifeCycleCallback(LifeCycleEventType::ACTIVE); } void AniWindowListener::AfterUnfocused() { - LifeCycleCallBack(LifeCycleEventType::INACTIVE); + LifeCycleCallback(LifeCycleEventType::INACTIVE); } void AniWindowListener::AfterResumed() { if (caseType_ == CaseType::CASE_STAGE) { - LifeCycleCallBack(LifeCycleEventType::RESUMED); + LifeCycleCallback(LifeCycleEventType::RESUMED); } } void AniWindowListener::AfterPaused() { if (caseType_ == CaseType::CASE_STAGE) { - LifeCycleCallBack(LifeCycleEventType::PAUSED); + LifeCycleCallback(LifeCycleEventType::PAUSED); } } void AniWindowListener::AfterDestroyed() { if (caseType_ == CaseType::CASE_WINDOW) { - LifeCycleCallBack(LifeCycleEventType::DESTROYED); + LifeCycleCallback(LifeCycleEventType::DESTROYED); } } @@ -244,7 +244,7 @@ void AniWindowListener::OnSizeChange(const sptr& info, TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallBack", + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallback", nullptr, thisListener->aniCallback_, static_cast(info->rect_.height_)); } @@ -259,7 +259,7 @@ void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanel TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallBack", + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } @@ -274,7 +274,7 @@ void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanel TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallBack", + AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } @@ -294,7 +294,7 @@ void AniWindowListener::OnTouchOutside() const TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::TouchOutsideCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::TouchOutsideCallback", 0, AppExecFwk::EventQueue::Priority::HIGH); } @@ -307,7 +307,7 @@ void AniWindowListener::OnScreenshot() TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallback", nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { @@ -333,7 +333,7 @@ void AniWindowListener::OnDialogTargetTouch() const TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::DialogTargetTouchCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::DialogTargetTouchCallback", 0, AppExecFwk::EventQueue::Priority::HIGH); } @@ -350,7 +350,7 @@ void AniWindowListener::OnGestureNavigationEnabledUpdate(bool enable) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(enable)); }; if (!eventHandler_) { @@ -369,7 +369,7 @@ void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(showWaterMark)); }; if (!eventHandler_) { @@ -418,14 +418,14 @@ void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowStatusCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowStatusCallback", nullptr, thisListener->aniCallback_, static_cast(windowstatus)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DEFAULT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::StatusChangeCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::StatusChangeCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } @@ -438,7 +438,7 @@ void AniWindowListener::OnWindowVisibilityChangedCallback(const bool isVisible) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(isVisible)); }; if (!eventHandler_) { @@ -457,7 +457,7 @@ void AniWindowListener::OnWindowHighlightChange(bool isHighlight) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(isHighlight)); }; if (!eventHandler_) { @@ -502,7 +502,7 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) TLOGE(WmsLogTag::WMS_LAYOUT, "get main event handler failed!"); return; } - eventHandler_->PostTask(task, "wms:AniWindowListener::RectChangeCallBack", 0, + eventHandler_->PostTask(task, "wms:AniWindowListener::RectChangeCallback", 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); currRect_ = rect; if (rectChangeReason == RectChangeReason::UNDEFINED) { @@ -521,7 +521,7 @@ void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) TLOGE(WmsLogTag::WMS_SUB, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallBack", + AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(terminateCloseProcess)); }; if (!eventHandler_) { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index ef3a3a9af0..06ac7284bd 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -570,7 +570,7 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co return ret; } env->GlobalReference_Delete(it->second->GetAniCallback()); - it->second->SetAniCallBack(nullptr); + it->second->SetAniCallback(nullptr); jsCbMap_[type].erase(it++); } } else { @@ -588,8 +588,8 @@ WmErrorCode AniWindowRegisterManager::UnregisterListener(sptr window, co TLOGE(WmsLogTag::DEFAULT, "[ANI]Unregister type %{public}s failed", type.c_str()); return ret; } - env->GlobalReference_Delete(it->second->GetAniCallBack()); - it->second->SetAniCallBack(nullptr); + env->GlobalReference_Delete(it->second->GetAniCallback()); + it->second->SetAniCallback(nullptr); jsCbMap_[type].erase(it); break; } -- Gitee From 3c98694c785400f453d3e9e211f3251aaa26c543 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 21:52:58 +0800 Subject: [PATCH 041/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 39cf81bea1..6458621e93 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2940,7 +2940,7 @@ export interface Window { rotate(rotateOptions: RotateOptions): void; setShadow(radius: number, color?: string, offsetX?: number, offsetY?: number): void; on(type: string, callback: Callback): void; - on(type: 'noInteractionDetected', timeout: number, callback: Callback): void; + on(type: 'noInteractionDetected', timeout: long, callback: Callback): void; off(type: string, callback?: Callback): void; } -- Gitee From 3a9b69f9bbfa2696fbc646fe35c47979a34a748c Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 24 Jul 2025 22:17:33 +0800 Subject: [PATCH 042/109] fix bug Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/src/ani_window_utils.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 58ec4f1cc0..93fa5bdafb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -746,8 +746,7 @@ void AniWindowUtils::SetSystemPropertiesWindowName(ani_env* env, const sptrname", nullptr, - static_cast(aniWindowName)); + CallAniMethodVoid(env, systemProperties, clsName, "name", nullptr, aniWindowName); } ani_object AniWindowUtils::CreateWindowsProperties(ani_env* env, const sptr& window) -- Gitee From a840a17302e2c829f632317f15a90140836db269 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Fri, 25 Jul 2025 10:16:33 +0800 Subject: [PATCH 043/109] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_utils.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 93fa5bdafb..51a1d27c7a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -662,7 +662,7 @@ void AniWindowUtils::SetSystemPropertiesWindowFousable(ani_env* env, const sptr< void AniWindowUtils::SetSystemPropertiesWindowIsPrivacyMode(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); bool windowIsPrivacyMode = window->IsPrivacyMode(); CallAniMethodVoid(env, systemProperties, clsName, "isPrivacyMode", nullptr, static_cast(windowIsPrivacyMode)); @@ -671,7 +671,7 @@ void AniWindowUtils::SetSystemPropertiesWindowIsPrivacyMode(ani_env* env, const void AniWindowUtils::SetSystemPropertiesWindowIsKeepScreenOn(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); bool windowIsKeepScreenOn = window->IsKeepScreenOn(); CallAniMethodVoid(env, systemProperties, clsName, "isKeepScreenOn", nullptr, static_cast(windowIsKeepScreenOn)); @@ -680,7 +680,7 @@ void AniWindowUtils::SetSystemPropertiesWindowIsKeepScreenOn(ani_env* env, const void AniWindowUtils::SetSystemPropertiesWindowBrightness(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); float windowBrightness = window->GetBrightness(); CallAniMethodVoid(env, systemProperties, clsName, "brightness", nullptr, static_cast(windowBrightness)); @@ -690,7 +690,7 @@ void AniWindowUtils::SetSystemPropertiesWindowBrightness(ani_env* env, const spt void AniWindowUtils::SetSystemPropertiesWindowIsTransparent(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); bool isTransparent = window->IsTransparent(); CallAniMethodVoid(env, systemProperties, clsName, "isTransparent", nullptr, static_cast(isTransparent)); @@ -700,7 +700,7 @@ void AniWindowUtils::SetSystemPropertiesWindowIsTransparent(ani_env* env, const void AniWindowUtils::SetSystemPropertiesWindowIsRoundCorner(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); bool windowIsRoundCorner {false}; CallAniMethodVoid(env, systemProperties, clsName, "isRoundCorner", nullptr, static_cast(windowIsRoundCorner)); @@ -710,7 +710,7 @@ void AniWindowUtils::SetSystemPropertiesWindowIsRoundCorner(ani_env* env, const void AniWindowUtils::SetSystemPropertiesWindowDimBehindValue(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); int windowDimBehindValue {0}; CallAniMethodVoid(env, systemProperties, clsName, "dimBehindValue", nullptr, static_cast(windowDimBehindValue)); @@ -720,7 +720,7 @@ void AniWindowUtils::SetSystemPropertiesWindowDimBehindValue(ani_env* env, const void AniWindowUtils::SetSystemPropertiesWindowId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); uint32_t windowId = window->GetWindowId(); CallAniMethodVoid(env, systemProperties, clsName, "id", nullptr, static_cast(windowId)); @@ -729,7 +729,7 @@ void AniWindowUtils::SetSystemPropertiesWindowId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); uint32_t displayId = window->GetDisplayId(); CallAniMethodVoid(env, systemProperties, clsName, "displayId", nullptr, static_cast(displayId)); @@ -738,8 +738,7 @@ void AniWindowUtils::SetSystemPropertiesDisplayId(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName) { - WindowPropertyInfo WindowPropertyInfo; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); std::string windowName = window->GetWindowName(); ani_string aniWindowName; if (ANI_OK != GetAniString(env, windowName, &aniWindowName)) { -- Gitee From 8010934535aafadf77468f56d4f429e73ed4af9b Mon Sep 17 00:00:00 2001 From: yanzhimo Date: Fri, 25 Jul 2025 10:40:49 +0800 Subject: [PATCH 044/109] [rotate] ani number to int/long/double Signed-off-by: yanzhimo --- .../window_stage_ani/ets/@ohos.window.ets | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 3cf55baa4f..db7553e345 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1560,51 +1560,51 @@ export interface ScaleOptions { /** * The scale param of x direction. Default is 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - x?: number; - + x?: double; + /** * The scale param of y direction. Default is 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - y?: number; - + y?: double; + /** * The scale param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - pivotX?: number; - + pivotX?: double; + /** * The scale param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - pivotY?: number; + pivotY?: double; } export class ScaleOptionsInternal implements ScaleOptions { - x?: number; - y?: number; - pivotX?: number; - pivotY?: number; + x?: double; + y?: double; + pivotX?: double; + pivotY?: double; } - + /** * Describes the rotate Transition Options of window * @@ -1617,62 +1617,62 @@ export interface RotateOptions { /** * The rotate degree of x direction. Default value is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - x?: number; - + x?: double; + /** * The rotate degree of y direction. Default value is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - y?: number; - + y?: double; + /** * The rotate degree of z direction. Default value is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - z?: number; - + z?: double; + /** * The param of pivot point of x. Default is 0.5f, Interval is 0.f - 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - pivotX?: number; - + pivotX?: double; + /** * The param of pivot point of y. Default is 0.5f, Interval is 0.f - 1.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - pivotY?: number; + pivotY?: double; } export class RotateOptionsInternal implements RotateOptions { - x?: number; - y?: number; - z?: number; - pivotX?: number; - pivotY?: number; + x?: double; + y?: double; + z?: double; + pivotX?: double; + pivotY?: double; } - + /** * Describes the translate Transition Options of window * @@ -1685,38 +1685,38 @@ export interface TranslateOptions { /** * The translate pixel param of x direction. Default is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - x?: number; - + x?: double; + /** * The translate pixel param of y direction. Default is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - y?: number; - + y?: double; + /** * The translate pixel param of z direction. Default is 0.f * - * @type { ?number } + * @type { ?double } * @syscap SystemCapability.WindowManager.WindowManager.Core * @systemapi * @since 9 */ - z?: number; + z?: double; } export class TranslateOptionsInternal implements TranslateOptions { - x?: number; - y?: number; - z?: number; + x?: double; + y?: double; + z?: double; } export class WindowStageInternal implements WindowStage { -- Gitee From ae4636e9959c1aa9f60e7d1d703883e2910c8959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B5=8B=E5=B2=A9?= Date: Thu, 24 Jul 2025 20:22:51 +0800 Subject: [PATCH 045/109] number type change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 苏嵋岩 --- .../window_stage_ani/ets/@ohos.window.ets | 18 +++++++++--------- .../window_stage_ani/include/ani_window.h | 6 +++--- .../window_stage_ani/src/ani_window.cpp | 18 +++++++++--------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index ee8a6c12e1..9ba9278b3a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1933,7 +1933,7 @@ export class WindowInternal implements Window { private native restore(nativeObj: long): void; private native startMoving(nativeObj: long): void; - private native startMoveWindowWithCoordinate(nativeObj: long, offsetX: double, offsetY: double): void; + private native startMoveWindowWithCoordinate(nativeObj: long, offsetX: int, offsetY: int): void; private native setWindowTitleButtonVisible(nativeObj: long, visibleParam: WindowTitleButtonVisibleParam): void; private native setDecorButtonStyle(nativeObj: long, decorStyle: DecorButtonStyle): void; private native getWindowStatus(nativeObj: long): int; @@ -1943,11 +1943,11 @@ export class WindowInternal implements Window { private native moveWindowTo(nativeObj: long, x: double, y: double): int; private native getGlobalRect(nativeObj:long): Rect; - private native getWindowDecorHeight(nativeObj:long): double; + private native getWindowDecorHeight(nativeObj:long): int; private native setWindowBackgroundColor(nativeObj: long, color: string): int; private native setImmersiveModeEnabledState(nativeObj: long, enable: boolean): int; private native setWindowDecorVisible(nativeObj: long, isVisible: boolean): int; - private native setWindowDecorHeight(nativeObj: long, height: double): int; + private native setWindowDecorHeight(nativeObj: long, height: int): int; private native getWindowProperties(nativeObj: long): WindowProperties; private native getProperties(nativeObj: long): WindowProperties; private native isWindowSupportWideGamut(nativeObj: long): boolean; @@ -2126,7 +2126,7 @@ export class WindowInternal implements Window { }); } - public startMoving(offsetX: double, offsetY: double): Promise { + public startMoving(offsetX: int, offsetY: int): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ) :void => { taskpool.execute((): void => { this.startMoveWindowWithCoordinate(this.nativeObj, offsetX, offsetY); @@ -2247,7 +2247,7 @@ export class WindowInternal implements Window { return ret; } - public getWindowDecorHeight(): number { + public getWindowDecorHeight(): int { let ret = this.getWindowDecorHeight(this.nativeObj); return ret; } @@ -2288,7 +2288,7 @@ export class WindowInternal implements Window { this.setWindowDecorVisible(this.nativeObj, isVisible); } - public setWindowDecorHeight(height: number): void { + public setWindowDecorHeight(height: int): void { this.setWindowDecorHeight(this.nativeObj, height); } @@ -2854,7 +2854,7 @@ export interface Window { restore(): Promise; startMoving(): Promise; - startMoving(offsetX: double, offsetY: double): Promise; + startMoving(offsetX: int, offsetY: int): Promise; setWindowTitleButtonVisible(isMaximizeButtonVisible: boolean, isMinimizeButtonVisible: boolean, isCloseButtonVisible?: boolean): void; setDecorButtonStyle(dectorStyle: DecorButtonStyle): void; @@ -2867,13 +2867,13 @@ export interface Window { resize(width: double, height: double, callback: AsyncCallback): void; moveWindowTo(x: double, y: double, callback: AsyncCallback): void; getGlobalRect(): Rect; - getWindowDecorHeight(): double; + getWindowDecorHeight(): int; setWindowBackgroundColor(color: string | ColorMetrics): void; setBackgroundColor(color: string): Promise; setBackgroundColor(color: string, callback: AsyncCallback): void; setImmersiveModeEnabledState(enable: boolean): void; setWindowDecorVisible(isVisible: boolean): void; - setWindowDecorHeight(height: number): void; + setWindowDecorHeight(height: int): void; getWindowProperties(): WindowProperties; getProperties(): Promise; getProperties(callback: AsyncCallback): void; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b4a36f9f16..df653dc75b 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -89,7 +89,7 @@ public: void SetTitleAndDockHoverShown(ani_env* env, ani_boolean isTitleHoverShown, ani_boolean isDockHoverShown); void Restore(ani_env* env); void StartMoving(ani_env* env); - void StartMoveWindowWithCoordinate(ani_env* env, ani_double offsetX, ani_double offsetY); + void StartMoveWindowWithCoordinate(ani_env* env, ani_int offsetX, ani_int offsetY); void SetWindowTitleButtonVisible(ani_env* env, ani_object visibleParam); void SetDecorButtonStyle(ani_env* env, ani_object decorStyle); ani_int GetWindowStatus(ani_env* env); @@ -100,11 +100,11 @@ public: ani_object MoveWindowTo(ani_env* env, ani_double x, ani_double y); ani_object GetGlobalRect(ani_env* env); - ani_double GetWindowDecorHeight(ani_env* env); + ani_int GetWindowDecorHeight(ani_env* env); ani_object SetWindowBackgroundColor(ani_env* env, const std::string& color); ani_object SetImmersiveModeEnabledState(ani_env* env, bool enable); ani_object SetWindowDecorVisible(ani_env* env, bool isVisible); - ani_object SetWindowDecorHeight(ani_env* env, ani_double height); + ani_object SetWindowDecorHeight(ani_env* env, ani_int height); ani_object GetWindowPropertiesSync(ani_env* env); ani_boolean IsWindowSupportWideGamut(ani_env* env); ani_object SetWindowLayoutFullScreen(ani_env* env, ani_boolean isLayoutFullScreen); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index fc7b297893..90388883d4 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -1288,7 +1288,7 @@ void AniWindow::StartMoving(ani_env* env) } } -void AniWindow::StartMoveWindowWithCoordinate(ani_env* env, ani_double offsetX, ani_double offsetY) +void AniWindow::StartMoveWindowWithCoordinate(ani_env* env, ani_int offsetX, ani_int offsetY) { if (windowToken_ == nullptr) { TLOGE(WmsLogTag::WMS_LAYOUT_PC, "[ANI] WindowToken is null."); @@ -1529,7 +1529,7 @@ ani_object AniWindow::GetGlobalRect(ani_env* env) return AniWindowUtils::CreateAniRect(env, globalScaleRect); } -ani_double AniWindow::GetWindowDecorHeight(ani_env* env) +ani_int AniWindow::GetWindowDecorHeight(ani_env* env) { int32_t height { 0 }; wptr weakToken(windowToken_); @@ -1884,7 +1884,7 @@ ani_object AniWindow::SetWindowDecorVisible(ani_env* env, bool isVisible) return AniWindowUtils::CreateAniUndefined(env); } -ani_object AniWindow::SetWindowDecorHeight(ani_env* env, ani_double height) +ani_object AniWindow::SetWindowDecorHeight(ani_env* env, ani_int height) { if (height < MIN_DECOR_HEIGHT || height > MAX_DECOR_HEIGHT) { TLOGE(WmsLogTag::DEFAULT, "[ANI] height should greater than 37 or smaller than 112"); @@ -2269,7 +2269,7 @@ static void StartMoving(ani_env* env, ani_object obj, ani_long nativeObj) } static void StartMoveWindowWithCoordinate(ani_env* env, ani_object obj, ani_long nativeObj, - ani_double offsetX, ani_double offsetY) + ani_int offsetX, ani_int offsetY) { using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] start"); @@ -2378,7 +2378,7 @@ static ani_object WindowGetGlobalRect(ani_env* env, ani_object obj, ani_long nat return aniWindow->GetGlobalRect(env); } -static ani_double WindowGetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj) +static ani_int WindowGetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -2436,7 +2436,7 @@ static ani_int WindowSetWindowDecorVisible(ani_env* env, ani_object obj, ani_lon return ANI_OK; } -static ani_int WindowSetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj, ani_double height) +static ani_int WindowSetWindowDecorHeight(ani_env* env, ani_object obj, ani_long nativeObj, ani_int height) { using namespace OHOS::Rosen; TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -2653,7 +2653,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(Restore)}, ani_native_function {"startMoving", "J:V", reinterpret_cast(StartMoving)}, - ani_native_function {"startMoveWindowWithCoordinate", "JDD:V", + ani_native_function {"startMoveWindowWithCoordinate", "JII:V", reinterpret_cast(StartMoveWindowWithCoordinate)}, ani_native_function {"setWindowTitleButtonVisible", "JL@ohos/window/window/WindowTitleButtonVisibleParam;:V", reinterpret_cast(SetWindowTitleButtonVisible)}, @@ -2671,7 +2671,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(WindowMoveWindowTo)}, ani_native_function {"getGlobalRect", "J:L@ohos/window/window/Rect;", reinterpret_cast(WindowGetGlobalRect)}, - ani_native_function {"getWindowDecorHeight", "J:D", + ani_native_function {"getWindowDecorHeight", "J:I", reinterpret_cast(WindowGetWindowDecorHeight)}, ani_native_function {"setWindowBackgroundColor", "JLstd/core/String;:I", reinterpret_cast(WindowSetWindowBackgroundColor)}, @@ -2679,7 +2679,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(WindowSetImmersiveModeEnabledState)}, ani_native_function {"setWindowDecorVisible", "JZ:I", reinterpret_cast(WindowSetWindowDecorVisible)}, - ani_native_function {"setWindowDecorHeight", "JD:I", + ani_native_function {"setWindowDecorHeight", "JI:I", reinterpret_cast(WindowSetWindowDecorHeight)}, ani_native_function {"getWindowProperties", "J:L@ohos/window/window/WindowProperties;", reinterpret_cast(WindowGetWindowProperties)}, -- Gitee From 7c8c659bdc0b5d9562b6b12ee00fe74ba665cdf5 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Fri, 25 Jul 2025 19:01:56 +0800 Subject: [PATCH 046/109] add Signed-off-by: chuanstudy --- .../ani_embeddable_window_stage_module.cpp | 3 +-- .../src/ani_window_stage_module.cpp | 19 +++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp index 84fc95cd06..4a6687610a 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp @@ -13,9 +13,8 @@ * limitations under the License. */ -#include "ani_embeddable_window_stage.h" - #include "ani.h" +#include "ani_embeddable_window_stage.h" #include "window_manager_hilog.h" extern "C" { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp index a338f86bf4..259d9b4eb2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp @@ -12,27 +12,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - -#include "ani_window_stage.h" - #include #include "ani.h" #include "ani_window.h" #include "ani_window_manager.h" +#include "ani_window_stage.h" #include "ani_window_utils.h" -#include "window_manager_hilog.h" #include "permission.h" +#include "window_manager_hilog.h" #include "window_scene.h" -using OHOS::Rosen::WindowScene; +using namespace OHOS::Rosen; static void SetWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag) { - using namespace OHOS::Rosen; TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { @@ -45,7 +41,6 @@ static void SetWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeO static ani_boolean IsWindowRectAutoSave(ani_env* env, ani_object obj, ani_long nativeObj) { - using namespace OHOS::Rosen; TLOGD(WmsLogTag::WMS_LAYOUT_PC, "[ANI] start"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { @@ -58,7 +53,6 @@ static ani_boolean IsWindowRectAutoSave(ani_env* env, ani_object obj, ani_long n static void RemoveStartingWindow(ani_env* env, ani_object obj, ani_long nativeObj) { - using namespace OHOS::Rosen; TLOGD(WmsLogTag::WMS_STARTUP_PAGE, "[ANI] start"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { @@ -71,7 +65,6 @@ static void RemoveStartingWindow(ani_env* env, ani_object obj, ani_long nativeOb static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long nativeObj) { - using namespace OHOS::Rosen; TLOGD(WmsLogTag::DEFAULT, "[ANI]"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { @@ -83,7 +76,6 @@ static ani_ref WindowGetMainWindow(ani_env* env, ani_object obj, ani_long native static ani_ref CreateSubWindow(ani_env* env, ani_object obj, ani_long nativeObj, ani_string name) { - using namespace OHOS::Rosen; TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindowStage* windowStage = reinterpret_cast(nativeObj); if (windowStage == nullptr || windowStage->GetWindowScene().lock() == nullptr) { @@ -96,9 +88,8 @@ static ani_ref CreateSubWindow(ani_env* env, ani_object obj, ani_long nativeObj, extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { - using namespace OHOS::Rosen; - ani_status ret; - ani_env* env; + ani_status ret = ANI_OK; + ani_env* env = nullptr; if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] null env"); return ANI_NOT_FOUND; -- Gitee From 500a7a3526fe38bc9279e8a250924ae446088f7f Mon Sep 17 00:00:00 2001 From: liuanguang Date: Sat, 26 Jul 2025 14:44:45 +0800 Subject: [PATCH 047/109] refactor(wms-layout): modify number to int/double/long Signed-off-by: liuanguang --- .../ets/@ohos.uiExtensionHost.ets | 12 +-- .../window_stage_ani/ets/@ohos.window.ets | 88 +++++++++---------- .../window_stage_ani/include/ani_window.h | 4 +- .../window_stage_ani/src/ani_window.cpp | 34 +++---- .../window_stage_ani/src/ani_window_utils.cpp | 12 +-- 5 files changed, 76 insertions(+), 74 deletions(-) diff --git a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets index 15a53bdfe5..a5ea6f32d5 100644 --- a/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets +++ b/interfaces/kits/ani/embeddable_window_stage/ets/@ohos.uiExtensionHost.ets @@ -41,14 +41,14 @@ namespace uiExtensionHost { } class UIESize implements window.Size { - width: double; - height: double; + width: int; + height: int; } class UIERect implements window.Rect { - left: double; - top: double; - width: double; - height: double; + left: int; + top: int; + width: int; + height: int; }; class UIEAvoidArea implements window.AvoidArea { constructor() { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index c3b485e59a..65ac513069 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -35,14 +35,14 @@ namespace window { /** * The width of the window. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @since 7 */ /** * The width of the window. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @since 10 @@ -50,13 +50,13 @@ namespace window { /** * The width of the window. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - width: number; + width: int; /** * The height of the window. @@ -67,7 +67,7 @@ namespace window { /** * The height of the window. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @since 10 @@ -75,13 +75,13 @@ namespace window { /** * The height of the window. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - height: number; + height: int; } export enum AvoidAreaType { /** @@ -443,13 +443,13 @@ namespace window { /** * The left of the Rect. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - left: number; + left: int; /** * The top of the Rect. @@ -467,13 +467,13 @@ namespace window { /** * The top of the Rect. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - top: number; + top: int; /** * The width of the Rect. @@ -491,13 +491,13 @@ namespace window { /** * The width of the Rect. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - width: number; + width: int; /** * The height of the Rect. @@ -515,25 +515,25 @@ namespace window { /** * The height of the Rect. * - * @type { number } + * @type { int } * @syscap SystemCapability.WindowManager.WindowManager.Core * @crossplatform * @atomicservice * @since 11 */ - height: number; + height: int; } export class RectInternal implements Rect { - left: double; - top: double; - width: double; - height: double; + left: int; + top: int; + width: int; + height: int; } export class SizeInternal implements Size { - width: double; - height: double; + width: int; + height: int; } //enum WMError { @@ -1268,7 +1268,7 @@ export class ConfigurationInternal implements Configuration { } export interface MoveConfiguration { - displayId: number; + displayId: long; } export interface WindowDensityInfo { @@ -1312,70 +1312,70 @@ export interface WindowLimits { /** * The maximum width of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @since 11 */ /** * The maximum width of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @atomicservice * @since 12 */ - maxWidth: number; + maxWidth: int; /** * The maximum height of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @since 11 */ /** * The maximum height of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @atomicservice * @since 12 */ - maxHeight: number; + maxHeight: int; /** * The minimum width of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @since 11 */ /** * The minimum width of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @atomicservice * @since 12 */ - minWidth: number; + minWidth: int; /** * The minimum height of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @since 11 */ /** * The minimum height of the window. * - * @type { ?number } + * @type { ?int } * @syscap SystemCapability.Window.SessionManager * @atomicservice * @since 12 */ - minHeight: number; + minHeight: int; } /** @@ -1961,8 +1961,8 @@ export class WindowInternal implements Window { private native getWindowStatus(nativeObj: long): int; private native minimize(nativeObj: long): void; private native maximize(nativeObj: long, presentation: int): void; - private native resize(nativeObj: long, width: double, height: double): int; - private native moveWindowTo(nativeObj: long, x: double, y: double): int; + private native resize(nativeObj: long, width: int, height: int): void; + private native moveWindowTo(nativeObj: long, x: int, y: int): void; private native getGlobalRect(nativeObj:long): Rect; private native getWindowDecorHeight(nativeObj:long): double; @@ -2220,7 +2220,7 @@ export class WindowInternal implements Window { }); } - public resize(width: double, height: double): Promise { + public resize(width: int, height: int): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { taskpool.execute((): void => { this.resize(this.nativeObj, width, height); @@ -2232,7 +2232,7 @@ export class WindowInternal implements Window { }); } - public moveWindowTo(x: double, y: double): Promise { + public moveWindowTo(x: int, y: int): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void) :void => { taskpool.execute((): void => { this.moveWindowTo(this.nativeObj, x, y); @@ -2244,7 +2244,7 @@ export class WindowInternal implements Window { }); } - public resize(width: double, height: double, callback: AsyncCallback): void { + public resize(width: int, height: int, callback: AsyncCallback): void { taskpool.execute((): void => { this.resize(this.nativeObj, width, height); }).then((ret: NullishType) => { @@ -2254,7 +2254,7 @@ export class WindowInternal implements Window { }); } - public moveWindowTo(x: double, y: double, callback: AsyncCallback): void { + public moveWindowTo(x: int, y: int, callback: AsyncCallback): void { taskpool.execute((): void => { this.moveWindowTo(this.nativeObj, x, y); }).then((ret: NullishType) => { @@ -2884,10 +2884,10 @@ export interface Window { minimize(callback: AsyncCallback): void; minimize(): Promise; maximize(presentation?: MaximizePresentation): Promise; - resize(width: double, height: double): Promise; - moveWindowTo(x: double, y: double): Promise; - resize(width: double, height: double, callback: AsyncCallback): void; - moveWindowTo(x: double, y: double, callback: AsyncCallback): void; + resize(width: int, height: int): Promise; + moveWindowTo(x: int, y: int): Promise; + resize(width: int, height: int, callback: AsyncCallback): void; + moveWindowTo(x: int, y: int, callback: AsyncCallback): void; getGlobalRect(): Rect; getWindowDecorHeight(): double; setWindowBackgroundColor(color: string | ColorMetrics): void; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b4a36f9f16..78998b2cd2 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -96,8 +96,8 @@ public: void Minimize(ani_env* env); void HideWindowFunction(ani_env* env, WmErrorCode errCode); void Maximize(ani_env* env, ani_int presentation); - ani_object Resize(ani_env* env, ani_double width, ani_double height); - ani_object MoveWindowTo(ani_env* env, ani_double x, ani_double y); + void Resize(ani_env* env, ani_int width, ani_int height); + void MoveWindowTo(ani_env* env, ani_int x, ani_int y); ani_object GetGlobalRect(ani_env* env); ani_double GetWindowDecorHeight(ani_env* env); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index fc7b297893..0d06a6c48f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -1480,32 +1480,32 @@ void AniWindow::Maximize(ani_env* env, ani_int presentation) } } -ani_object AniWindow::Resize(ani_env* env, ani_double width, ani_double height) +void AniWindow::Resize(ani_env* env, ani_int width, ani_int height) { if (windowToken_ == nullptr) { - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; } WMError ret = windowToken_->Resize(static_cast(width), static_cast(height)); if (ret != WMError::WM_OK) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] Resize set error, ret:%{public}d", ret); - return AniWindowUtils::AniThrowError(env, ret); + AniWindowUtils::AniThrowError(env, ret); } - return AniWindowUtils::CreateAniUndefined(env); } -ani_object AniWindow::MoveWindowTo(ani_env* env, ani_double x, ani_double y) +void AniWindow::MoveWindowTo(ani_env* env, ani_int x, ani_int y) { if (windowToken_ == nullptr) { - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; } WMError ret = windowToken_->MoveTo(static_cast(x), static_cast(y)); if (ret != WMError::WM_OK) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] MoveWindowTo set error, ret:%{public}d", ret); - return AniWindowUtils::AniThrowError(env, ret); + AniWindowUtils::AniThrowError(env, ret); } - return AniWindowUtils::CreateAniUndefined(env); } ani_object AniWindow::GetGlobalRect(ani_env* env) @@ -2342,28 +2342,30 @@ static void Maximize(ani_env* env, ani_object obj, ani_long nativeObj, ani_int p aniWindow->Maximize(env, presentation); } -static ani_object WindowResize(ani_env* env, ani_object obj, ani_long nativeObj, ani_double width, ani_double height) +static void WindowResize(ani_env* env, ani_object obj, ani_long nativeObj, ani_int width, ani_int height) { using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); + AniWindowUtils::CreateAniUndefined(env); + return; } - return aniWindow->Resize(env, width, height); + aniWindow->Resize(env, width, height); } -static ani_object WindowMoveWindowTo(ani_env* env, ani_object obj, ani_long nativeObj, ani_double x, ani_double y) +static void WindowMoveWindowTo(ani_env* env, ani_object obj, ani_long nativeObj, ani_int x, ani_int y) { using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] windowToken is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); + AniWindowUtils::CreateAniUndefined(env); + return; } - return aniWindow->MoveWindowTo(env, x, y); + aniWindow->MoveWindowTo(env, x, y); } static ani_object WindowGetGlobalRect(ani_env* env, ani_object obj, ani_long nativeObj) @@ -2665,9 +2667,9 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(Minimize)}, ani_native_function {"maximize", "JI:V", reinterpret_cast(Maximize)}, - ani_native_function {"resize", "JDD:I", + ani_native_function {"resize", "JII:V", reinterpret_cast(WindowResize)}, - ani_native_function {"moveWindowTo", "JDD:I", + ani_native_function {"moveWindowTo", "JII:V", reinterpret_cast(WindowMoveWindowTo)}, ani_native_function {"getGlobalRect", "J:L@ohos/window/window/Rect;", reinterpret_cast(WindowGetGlobalRect)}, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 8404f32522..c263c1c574 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -255,8 +255,8 @@ ani_object AniWindowUtils::CreateAniSize(ani_env* env, int32_t width, int32_t he TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to new obj"); return AniWindowUtils::CreateAniUndefined(env); } - CallAniMethodVoid(env, aniRect, aniClass, "width", nullptr, ani_double(width)); - CallAniMethodVoid(env, aniRect, aniClass, "height", nullptr, ani_double(height)); + CallAniMethodVoid(env, aniRect, aniClass, "width", nullptr, ani_int(width)); + CallAniMethodVoid(env, aniRect, aniClass, "height", nullptr, ani_int(height)); return aniRect; } @@ -363,10 +363,10 @@ ani_object AniWindowUtils::CreateAniRect(ani_env* env, const Rect& rect) TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to create new obj"); return AniWindowUtils::CreateAniUndefined(env); } - CallAniMethodVoid(env, aniRect, aniClass, "left", nullptr, ani_double(rect.posX_)); - CallAniMethodVoid(env, aniRect, aniClass, "top", nullptr, ani_double(rect.posY_)); - CallAniMethodVoid(env, aniRect, aniClass, "width", nullptr, ani_double(rect.width_)); - CallAniMethodVoid(env, aniRect, aniClass, "height", nullptr, ani_double(rect.height_)); + CallAniMethodVoid(env, aniRect, aniClass, "left", nullptr, ani_int(rect.posX_)); + CallAniMethodVoid(env, aniRect, aniClass, "top", nullptr, ani_int(rect.posY_)); + CallAniMethodVoid(env, aniRect, aniClass, "width", nullptr, ani_int(rect.width_)); + CallAniMethodVoid(env, aniRect, aniClass, "height", nullptr, ani_int(rect.height_)); return aniRect; } -- Gitee From 3bda2c4f317830301f8585b2fa7f2c6f92acc95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=AC=E6=9D=BE?= <18328528985@163.com> Date: Sat, 26 Jul 2025 13:27:26 +0800 Subject: [PATCH 048/109] Qiangji FloatingBallControllerTest Ut Fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 周敬松 <18328528985@163.com> --- wm/test/unittest/floating_ball_controller_test.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/wm/test/unittest/floating_ball_controller_test.cpp b/wm/test/unittest/floating_ball_controller_test.cpp index 6b9fd1f348..e1e3388dbc 100644 --- a/wm/test/unittest/floating_ball_controller_test.cpp +++ b/wm/test/unittest/floating_ball_controller_test.cpp @@ -125,8 +125,9 @@ namespace { */ HWTEST_F(FloatingBallControllerTest, CreateFloatingBallWindow01, TestSize.Level1) { - AbilityRuntime::AbilityContextImpl* contextPtr = new AbilityRuntime::AbilityContextImpl(); - fbController_->contextPtr_ = contextPtr; + std::shared_ptr contextPtr = + std::make_shared(); + fbController_->contextPtr_ = &contextPtr; fbController_->fbOption_ = nullptr; EXPECT_EQ(WMError::WM_ERROR_FB_STATE_ABNORMALLY, fbController_->CreateFloatingBallWindow()); fbController_->fbOption_ = option_; @@ -140,7 +141,7 @@ HWTEST_F(FloatingBallControllerTest, CreateFloatingBallWindow01, TestSize.Level1 EXPECT_EQ(100, fbController_->mainWindowId_); fbController_->UpdateMainWindow(mw_); EXPECT_EQ(101, fbController_->mainWindowId_); - delete contextPtr; + fbController_->contextPtr_ = nullptr; } /** @@ -170,11 +171,12 @@ HWTEST_F(FloatingBallControllerTest, StartFloatingBall01, TestSize.Level1) EXPECT_EQ(WMError::WM_ERROR_FB_STATE_ABNORMALLY, fbController_->StartFloatingBall(option_)); EXPECT_EQ(FbWindowState::STATE_UNDEFINED, fbController_->curState_); - AbilityRuntime::AbilityContextImpl* contextPtr = new AbilityRuntime::AbilityContextImpl(); - fbController_->contextPtr_ = contextPtr; + std::shared_ptr contextPtr = + std::make_shared(); + fbController_->contextPtr_ = &contextPtr; EXPECT_NE(WMError::WM_OK, fbController_->StartFloatingBall(option_)); EXPECT_EQ(FbWindowState::STATE_UNDEFINED, fbController_->GetControllerState()); - delete contextPtr; + fbController_->contextPtr_ = nullptr; } /** -- Gitee From 51083981db7061e89a4e325fff490b79c1c267c2 Mon Sep 17 00:00:00 2001 From: kaicui Date: Mon, 28 Jul 2025 14:39:50 +0800 Subject: [PATCH 049/109] noInteractionDetected timeout ani_double to ani_long Signed-off-by: kaicui --- .../window_stage_ani/include/ani_window.h | 4 ++-- .../include/ani_window_register_manager.h | 6 +++--- .../window_stage_ani/src/ani_window.cpp | 6 +++--- .../src/ani_window_register_manager.cpp | 13 ++++++------- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b4a36f9f16..1abec68aac 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -55,7 +55,7 @@ public: static ani_object GetUIContext(ani_env* env, ani_object obj, ani_long nativeObj); static ani_object GetWindowAvoidArea(ani_env* env, ani_object obj, ani_long nativeObj, ani_int type); static void RegisterNoInteractionDetectedCallback(ani_env* env, ani_object obj, ani_long nativeObj, - ani_string type, ani_double timeout, ani_ref callback); + ani_string type, ani_long timeout, ani_ref callback); static void RegisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, @@ -128,7 +128,7 @@ private: void OnSetWindowSystemBarEnable(ani_env* env, ani_object nameAry); ani_object OnGetUIContext(ani_env* env); ani_object OnGetWindowAvoidArea(ani_env* env, ani_int type); - void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_double timeout); + void OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_long timeout); void OnUnregisterWindowCallback(ani_env* env, ani_string type, ani_ref callback); void OnShowWindow(ani_env* env); void OnDestroyWindow(ani_env* env); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 11fb377d50..73c62e4fab 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -58,7 +58,7 @@ public: AniWindowRegisterManager(); ~AniWindowRegisterManager(); WmErrorCode RegisterListener(sptr window, const std::string& type, - CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout); + CaseType caseType, ani_env* env, ani_ref callback, ani_long timeout); WmErrorCode UnregisterListener(sptr window, const std::string& type, CaseType caseType, ani_env* env, ani_ref callback); private: @@ -98,7 +98,7 @@ private: WmErrorCode ProcessDisplayIdChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowNoInteractionRegister(sptr listener, sptr window, - bool isRegister, ani_env* env, ani_double timeout); + bool isRegister, ani_env* env, ani_long timeout); WmErrorCode ProcessWindowStatusChangeRegister(sptr listener, sptr window, bool isRegister, ani_env* env); WmErrorCode ProcessWindowTitleButtonRectChangeRegister(sptr listener, sptr window, @@ -113,7 +113,7 @@ private: bool isRegister, ani_env* env); WmErrorCode ProcessListener(RegisterListenerType registerListenerType, CaseType caseType, const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env, ani_double timeout); + ani_env* env, ani_long timeout); std::map>> jsCbMap_; std::mutex mtx_; }; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index fc7b297893..a30bd5fb87 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -1570,7 +1570,7 @@ void AniWindow::RegisterWindowCallback(ani_env* env, ani_object obj, ani_long na { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - ani_double timeOut = 0; + ani_long timeOut = 0; if (aniWindow != nullptr) { aniWindow->OnRegisterWindowCallback(env, type, callback, timeOut); } else { @@ -1579,7 +1579,7 @@ void AniWindow::RegisterWindowCallback(ani_env* env, ani_object obj, ani_long na } void AniWindow::RegisterNoInteractionDetectedCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, - ani_double timeOut, ani_ref callback) + ani_long timeOut, ani_ref callback) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); @@ -1590,7 +1590,7 @@ void AniWindow::RegisterNoInteractionDetectedCallback(ani_env* env, ani_object o } } -void AniWindow::OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_double timeOut) +void AniWindow::OnRegisterWindowCallback(ani_env* env, ani_string type, ani_ref callback, ani_long timeOut) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); auto window = GetWindow(); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 06ac7284bd..2ce87eb509 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -311,7 +311,7 @@ WmErrorCode AniWindowRegisterManager::ProcessWindowVisibilityChangeRegister(sptr } WmErrorCode AniWindowRegisterManager::ProcessWindowNoInteractionRegister(sptr listener, - sptr window, bool isRegister, ani_env* env, ani_double timeout) + sptr window, bool isRegister, ani_env* env, ani_long timeout) { if (window == nullptr) { return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; @@ -320,15 +320,14 @@ WmErrorCode AniWindowRegisterManager::ProcessWindowNoInteractionRegister(sptrUnregisterWindowNoInteractionListener(thisListener)); } - ani_long tmptimeout = static_cast(timeout); constexpr ani_long secToMicrosecRatio = 1000; constexpr ani_long noInteractionMax = LLONG_MAX / secToMicrosecRatio; - if (tmptimeout <= 0 || (tmptimeout > noInteractionMax)) { + if (timeout <= 0 || (timeout > noInteractionMax)) { TLOGE(WmsLogTag::DEFAULT, "invalid parameter: no-interaction-timeout %{public}lld is not in(0s~%{public}lld", - tmptimeout, noInteractionMax); + timeout, noInteractionMax); return WmErrorCode::WM_ERROR_INVALID_PARAM; } - thisListener->SetTimeout(tmptimeout * secToMicrosecRatio); + thisListener->SetTimeout(timeout * secToMicrosecRatio); return WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterWindowNoInteractionListener(thisListener)); } @@ -419,7 +418,7 @@ bool AniWindowRegisterManager::IsCallbackRegistered(ani_env* env, std::string ty } WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, const std::string& type, - CaseType caseType, ani_env* env, ani_ref callback, ani_double timeout) + CaseType caseType, ani_env* env, ani_ref callback, ani_long timeout) { std::lock_guard lock(mtx_); if (IsCallbackRegistered(env, type, callback)) { @@ -460,7 +459,7 @@ WmErrorCode AniWindowRegisterManager::RegisterListener(sptr window, cons WmErrorCode AniWindowRegisterManager::ProcessListener(RegisterListenerType registerListenerType, CaseType caseType, const sptr& windowManagerListener, const sptr& window, bool isRegister, - ani_env* env, ani_double timeout) + ani_env* env, ani_long timeout) { if (caseType == CaseType::CASE_WINDOW_MANAGER) { switch (static_cast(registerListenerType)) { -- Gitee From 3e1a6b4d423df01b5662415075d8bb95c2ec1e7c Mon Sep 17 00:00:00 2001 From: kaicui Date: Mon, 28 Jul 2025 19:35:09 +0800 Subject: [PATCH 050/109] Change noInteractionDetected timeout log string from lld to PRId64 Signed-off-by: kaicui --- .../window_stage_ani/src/ani_window_register_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 2ce87eb509..98179d4a9c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -323,8 +323,8 @@ WmErrorCode AniWindowRegisterManager::ProcessWindowNoInteractionRegister(sptr noInteractionMax)) { - TLOGE(WmsLogTag::DEFAULT, "invalid parameter: no-interaction-timeout %{public}lld is not in(0s~%{public}lld", - timeout, noInteractionMax); + TLOGE(WmsLogTag::DEFAULT, "invalid parameter: no-interaction-timeout %{public}" PRId64 " is not in " + "(0s~%{public}" PRId64, timeout, noInteractionMax); return WmErrorCode::WM_ERROR_INVALID_PARAM; } thisListener->SetTimeout(timeout * secToMicrosecRatio); -- Gitee From ba20e48033eba2cb97d54bfbe91a61c1ad73a074 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Mon, 28 Jul 2025 16:37:09 +0800 Subject: [PATCH 051/109] ani bugfix Signed-off-by: zhangweihua --- .../display_ani/ets/@ohos.display.ets | 4 +- .../display_ani/include/display_ani_manager.h | 1 + .../display_ani/src/ani_err_utils.cpp | 2 +- .../display_ani/src/display_ani.cpp | 12 ++-- .../display_ani/src/display_ani_listener.cpp | 42 +++++------ .../display_ani/src/display_ani_manager.cpp | 63 +++++++++++------ .../screen_ani/ets/@ohos.screen.ets | 10 ++- .../screen_ani/include/screen_ani_manager.h | 1 + .../screen_ani/src/ani_err_utils.cpp | 2 +- .../screen_ani/src/screen_ani_listener.cpp | 51 ++++++-------- .../screen_ani/src/screen_ani_manager.cpp | 69 +++++++++++++------ .../screenshot_ani/src/ani_err_utils.cpp | 2 +- 12 files changed, 146 insertions(+), 113 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 8cf431404d..4f99569c2f 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -272,7 +272,7 @@ export class DisplayImpl implements Display { minusRectArray(res.boundingRects); return res; }).then((ret: NullishType) => { - callback(new BusinessError(), ret as CutoutInfo); + callback(null, ret as CutoutInfo); }).catch((err: NullishType) => { callback(err as BusinessError, new CutoutInfoImpl()); }); @@ -426,7 +426,7 @@ export function getAllDisplays(callback: AsyncCallback>): void { try { getAllDisplaysSyncNative(res); minusDisplayArray(res); - callback(new BusinessError(), res); + callback(null, res); } catch (err: BusinessError) { hilog.error(DOMAIN, TAG, 'get all display from err'); callback(err, res); diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h index de5515815a..42f4e67212 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h @@ -52,6 +52,7 @@ private: void OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); void OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object obj); void OnGetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj); + bool IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback); std::mutex mtx_; std::map>> jsCbMap_; }; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp index 0e0df5fc1f..db16a55bca 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp @@ -165,7 +165,7 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 5ea5565237..49590eb063 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -150,12 +150,10 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); ani_boolean callbackUndefined = 0; - ani_boolean callbackIsNull = 0; env->Reference_IsUndefined(callback, &callbackUndefined); - env->Reference_IsNull(callback, &callbackIsNull); - if (callbackUndefined || callbackIsNull) { + if (callbackUndefined) { std::string errMsg = "[ANI] failed to register display listener with type, cbk null or undefined"; - TLOGE(WmsLogTag::DMS, "callbackNull or undefined"); + TLOGE(WmsLogTag::DMS, "callback undef"); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); return; } @@ -213,10 +211,10 @@ void DisplayAni::OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string t TLOGI(WmsLogTag::DMS, "[ANI] begin"); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); - ani_boolean callbackNull = 0; - env->Reference_IsUndefined(callback, &callbackNull); + ani_boolean callbackUndefined = 0; + env->Reference_IsUndefined(callback, &callbackUndefined); DmErrorCode ret; - if (callbackNull) { + if (callbackUndefined) { TLOGI(WmsLogTag::DMS, "[ANI] for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); } else { diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 7178d01839..9128946847 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -42,12 +42,7 @@ void DisplayAniListener::AddCallback(const std::string& type, ani_ref callback) return; } std::lock_guard lock(aniCallbackMtx_); - ani_ref cbRef{}; - if (env_->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); - return; - }; - aniCallback_[type].emplace_back(cbRef); + aniCallback_[type].emplace_back(callback); TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallback_ size: %{public}u!", static_cast(aniCallback_[type].size())); } @@ -76,8 +71,15 @@ void DisplayAniListener::RemoveCallback(ani_env* env, const std::string& type, a void DisplayAniListener::RemoveAllCallback() { - std::lock_guard lock(aniCallbackMtx_); - aniCallback_.clear(); + std::lock_guard lock(aniCallBackMtx_); + for (auto& [typeString, callbacks] : aniCallBack_) { + for (auto callback : callbacks) { + if (env_) { + env_->GlobalReference_Delete(callback); + } + } + } + aniCallBack_.clear(); } void DisplayAniListener::OnCreate(DisplayId id) @@ -106,12 +108,10 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes != 0 || nullRes != 0) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); continue; } auto task = [env = env_, oneAniCallback, id] { @@ -153,12 +153,10 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes != 0 || nullRes != 0) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); continue; } auto task = [env = env_, oneAniCallback, id] { @@ -197,12 +195,10 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); - if (undefRes != 0 || nullRes != 0) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undef, return"); continue; } auto task = [env = env_, oneAniCallback, id] { diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index 160affb2b2..c0546f27b1 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -162,11 +162,9 @@ void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_ return; } sptr display = SingletonContainer::Get().GetDisplayById(static_cast(displayId)); - if (display == nullptr) { - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_SYSTEM_INNORMAL, ""); - } if (display == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] Display null"); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_SYSTEM_INNORMAL, ""); return; } DisplayAniUtils::CvtDisplay(display, env, obj); @@ -199,26 +197,28 @@ void DisplayManagerAni::RegisterCallback(ani_env* env, ani_string type, void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); - std::lock_guard lock(mtx_); std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); + ani_ref cbRef{}; + if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] create global ref fail"); + return; + } + std::lock_guard lock(mtx_); + if (IsCallbackRegistered(env, typeString, cbRef)) { + TLOGI(WmsLogTag::DMS, "[ANI] type %{public}s callback already registered!", typeString.c_str()); + return; + } + TLOGI(WmsLogTag::DMS, "[ANI] onRegisterCallback"); ani_boolean callbackUndefined = 0; - ani_boolean callbackIsNull = 0; - env->Reference_IsUndefined(callback, &callbackUndefined); - env->Reference_IsNull(callback, &callbackIsNull); + env->Reference_IsUndefined(cbRef, &callbackUndefined); DmErrorCode ret; - if (callbackUndefined || callbackIsNull) { + if (callbackUndefined) { std::string errMsg = "[ANI] failed to register display listener with type, cbk null or undefined"; TLOGE(WmsLogTag::DMS, "callbackNull or undefined"); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); return; } - ani_ref cbRef{}; - if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]create global ref fail"); - }; - TLOGI(WmsLogTag::DMS, "create listener"); sptr displayAniListener = new(std::nothrow) DisplayAniListener(env); if (displayAniListener == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI]displayListener is nullptr"); @@ -236,7 +236,24 @@ void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_re return; } // add listener to map - jsCbMap_[typeString][callback] = displayAniListener; + jsCbMap_[typeString][cbRef] = displayAniListener; +} + +bool DisplayManagerAni::IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback) +{ + if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { + TLOGI(WmsLogTag::DMS, "method %{public}s not registered!", type.c_str()); + return false; + } + for (const auto& iter : jsCbMap_[type]) { + ani_boolean isEquals = false; + env->Reference_StrictEquals(callback, iter.first, &isEquals); + if (isEquals) { + TLOGE(WmsLogTag::DMS, "callback already registered!"); + return true; + } + } + return false; } DmErrorCode DisplayManagerAni::ProcessRegisterCallback(ani_env* env, std::string& typeStr, @@ -284,18 +301,23 @@ void DisplayManagerAni::UnRegisterCallback(ani_env* env, ani_string type, void DisplayManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); + ani_ref cbRef{}; + if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] create global ref fail"); + return; + } std::string typeString; DisplayAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); ani_boolean callbackNull = 0; - env->Reference_IsUndefined(callback, &callbackNull); + env->Reference_IsUndefined(cbRef, &callbackNull); DmErrorCode ret; if (callbackNull) { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); + TLOGI(WmsLogTag::DMS, "[ANI] for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnregisterAllDisplayListenerWithType(typeString)); } else { - TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback with type"); - ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterDisplayListenerWithType(typeString, env, callback)); + TLOGI(WmsLogTag::DMS, "[ANI] with type"); + ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterDisplayListenerWithType(typeString, env, cbRef)); } if (ret != DmErrorCode::DM_OK) { @@ -360,7 +382,7 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type { TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { - TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType methodName %{public}s not registered!", + TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); return DMError::DM_OK; } @@ -390,7 +412,6 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type ret = SingletonContainer::Get().UnregisterPrivateWindowListener(thisListener); } jsCbMap_[type].erase(it++); - TLOGI(WmsLogTag::DMS, "[ANI] UnregisterAllDisplayListenerWithType end"); } jsCbMap_.erase(type); return ret; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index d6b050eab3..374ae6e506 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -20,17 +20,15 @@ export default namespace screen { loadLibrary('screenani_kit.z'); -export function on(eventType: 'connect' | 'disconnect' | 'change', callback: Callback): void{ +export function on(eventType: string, callback: Callback): void{ syncOn(eventType, callback, screenMgrRef); } -native function syncOn(eventType: 'connect' | 'disconnect' | 'change', - callback: Callback, nativeObj: long): void; +native function syncOn(eventType: string, callback: object, nativeObj: long): void; -export function off(eventType: 'connect' | 'disconnect' | 'change', callback?: Callback): void{ +export function off(eventType: string, callback?: Callback): void{ syncOff(eventType, screenMgrRef, callback); } -native function syncOff(eventType: 'connect' | 'disconnect' | 'change', - nativeObj: long, callback?: Callback): void; +native function syncOff(eventType: string, nativeObj: long, callback?: object): void; export function makeMirror(mainScreen: number, mirrorScreen: Array, callback: AsyncCallback): void { taskpool.execute((): number => { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h index 61fca6915c..4606502229 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h @@ -43,6 +43,7 @@ private: void OnUnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); DMError UnRegisterScreenListenerWithType(std::string type, ani_env* env, ani_ref callback); DMError UnRegisterAllScreenListenerWithType(std::string type); + bool IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback); std::mutex mtx_; std::map>> jsCbMap_; }; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp index 47ace25c35..0f9c197337 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp @@ -136,7 +136,7 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 945efbefbd..5614fb54d5 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -41,12 +41,7 @@ void ScreenAniListener::AddCallback(const std::string& type, ani_ref callback) return; } std::lock_guard lock(mtx_); - ani_ref cbRef{}; - if (env_->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); - return; - }; - aniCallback_[type].emplace_back(cbRef); + aniCallback_[type].emplace_back(callback); TLOGI(WmsLogTag::DMS, "[ANI] AddCallback success aniCallback_ size: %{public}u!", static_cast(aniCallback_[type].size())); } @@ -102,13 +97,11 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes != 0 || nullRes != 0) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); continue; } @@ -151,13 +144,11 @@ void ScreenAniListener::OnDisconnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); // judge is null or undefined - if (undefRes != 0 || nullRes != 0) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undefRes or null"); + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); continue; } @@ -173,8 +164,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) AppExecFwk::EventQueue::Priority::IMMEDIATE); } } - -// need to implement + void ScreenAniListener::OnChange(ScreenId id) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); @@ -195,29 +185,28 @@ void ScreenAniListener::OnChange(ScreenId id) return; } std::vector vec = it->second; - TLOGI(WmsLogTag::DMS, "vec_callback size: %{public}d", vec.size()); // find callbacks in vector for (auto oneAniCallback : vec) { if (env_ == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes = 0; - ani_boolean nullRes = 0; + ani_boolean undefRes; env_->Reference_IsUndefined(oneAniCallback, &undefRes); - env_->Reference_IsNull(oneAniCallback, &nullRes); - // judge is null or undefined - if (undefRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, return"); - return; + if (undefRes) { + TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, continue"); + continue; } - if (nullRes == 1) { - TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback null, return"); + auto task = [env = env_, oneAniCallback, id] () { + ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", + "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + }; + if (!eventHandler_) { + TLOGE(WmsLogTag::DMS, "get main event handler failed!"); return; } - - ScreenAniUtils::CallAniFunctionVoid(env_, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + eventHandler_->PostTask(task, "dms:AniScreenListener::CreateCallBack", 0, + AppExecFwk::EventQueue::Priority::IMMEDIATE); } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 3d0ec5aff5..e904897963 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -58,25 +58,28 @@ void ScreenManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_lon void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); - std::lock_guard lock(mtx_); + ani_ref cbRef{}; std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); + if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] create global ref fail"); + return; + } + std::lock_guard lock(mtx_); + if (IsCallbackRegistered(env, typeString, cbRef)) { + TLOGI(WmsLogTag::DMS, "[ANI] type %{public}s callback already registered!", typeString.c_str()); + return; + } + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_boolean callbackUndefined = 0; - ani_boolean callbackIsNull = 0; - env->Reference_IsUndefined(callback, &callbackUndefined); - env->Reference_IsNull(callback, &callbackIsNull); + env->Reference_IsUndefined(cbRef, &callbackUndefined); DmErrorCode ret; - if (callbackUndefined || callbackIsNull) { + if (callbackUndefined) { std::string errMsg = "[ANI] failed to register screen listener with type, cbk null or undefined"; - TLOGE(WmsLogTag::DMS, "callbackNull or undefined"); + TLOGE(WmsLogTag::DMS, "undefined"); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); return; } - ani_ref cbRef{}; - if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]create global ref fail"); - }; TLOGI(WmsLogTag::DMS, "create listener"); sptr screenAniListener = new(std::nothrow) ScreenAniListener(env); if (screenAniListener == nullptr) { @@ -86,7 +89,6 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref } screenAniListener->AddCallback(typeString, cbRef); screenAniListener->SetMainEventHandler(); - ret = ProcessRegisterCallback(env, typeString, screenAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register screen listener with type, errcode: %{public}d", ret); @@ -95,7 +97,7 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref return; } // add listener to map - jsCbMap_[typeString][callback] = screenAniListener; + jsCbMap_[typeString][cbRef] = screenAniListener; } DmErrorCode ScreenManagerAni::ProcessRegisterCallback(ani_env* env, std::string& typeStr, @@ -116,10 +118,10 @@ void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_r std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); std::lock_guard lock(mtx_); - ani_boolean callbackNull = 0; - env->Reference_IsUndefined(callback, &callbackNull); + ani_boolean callbackUndefined = 0; + env->Reference_IsUndefined(callback, &callbackUndefined); DmErrorCode ret; - if (callbackNull) { + if (callbackUndefined) { TLOGI(WmsLogTag::DMS, "[ANI] OnUnRegisterCallback for all"); ret = DM_JS_TO_ERROR_CODE_MAP.at(UnRegisterAllScreenListenerWithType(typeString)); } else { @@ -138,17 +140,39 @@ void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_r } } +bool ScreenManagerAni::IsCallbackRegistered(ani_env* env, const std::string& type, ani_ref callback) +{ + if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { + TLOGI(WmsLogTag::DMS, "method %{public}s not registered!", type.c_str()); + return false; + } + for (const auto& iter : jsCbMap_[type]) { + ani_boolean isEquals = false; + env->Reference_StrictEquals(callback, iter.first, &isEquals); + if (isEquals) { + TLOGE(WmsLogTag::DMS, "callback already registered!"); + return true; + } + } + return false; +} + DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani_env* env, ani_ref callback) { - TLOGI(WmsLogTag::DMS, "[ANI] begin"); + TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterScreenListenerWithType begin"); + DMError ret = DMError::DM_OK; if (jsCbMap_.empty() || jsCbMap_.find(type) == jsCbMap_.end()) { TLOGI(WmsLogTag::DMS, "[ANI] methodName %{public}s not registered!", type.c_str()); - return DMError::DM_OK; + return ret; + } + ani_ref cbRef{}; + if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI]create global ref fail"); + return DMError::DM_ERROR_INVALID_PARAM; } - DMError ret = DMError::DM_OK; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end(); it++) { ani_boolean isEquals = 0; - env->Reference_StrictEquals(callback, it->first, &isEquals); + env->Reference_StrictEquals(cbRef, it->first, &isEquals); if (isEquals) { it->second->RemoveCallback(env, type, callback); if (type == EVENT_CHANGE) { @@ -157,8 +181,13 @@ DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterScreenListener(thisListener); } + jsCbMap_[type].erase(it); + break; } } + if (jsCbMap_[type].empty()) { + jsCbMap_.erase(type); + } return ret; } diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp index f16352c868..9699f2d6fa 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp @@ -136,7 +136,7 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st TLOGE(WmsLogTag::DMS, "[ANI] fail to new err, status:%{public}d", static_cast(status)); return status; } - status = env->Object_SetFieldByName_Double(*err, "code", static_cast(error)); + status = env->Object_SetFieldByName_Int(*err, "code", static_cast(error)); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] fail to set code, status:%{public}d", static_cast(status)); return status; -- Gitee From 045c202dba1749ac6c36ec07efc1aa677b7d4d88 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Tue, 29 Jul 2025 11:51:02 +0800 Subject: [PATCH 052/109] ani bugfix Signed-off-by: zhangweihua --- .../display_ani/src/display_ani_listener.cpp | 12 ++++++------ .../display_ani/src/display_ani_manager.cpp | 5 +++++ .../screen_ani/src/screen_ani_listener.cpp | 6 +++--- .../screen_ani/src/screen_ani_manager.cpp | 11 ++++++++--- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 9128946847..1646fae8bb 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -71,15 +71,15 @@ void DisplayAniListener::RemoveCallback(ani_env* env, const std::string& type, a void DisplayAniListener::RemoveAllCallback() { - std::lock_guard lock(aniCallBackMtx_); - for (auto& [typeString, callbacks] : aniCallBack_) { + std::lock_guard lock(aniCallbackMtx_); + for (auto& [typeString, callbacks] : aniCallback_) { for (auto callback : callbacks) { if (env_) { env_->GlobalReference_Delete(callback); } } } - aniCallBack_.clear(); + aniCallback_.clear(); } void DisplayAniListener::OnCreate(DisplayId id) @@ -108,7 +108,7 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); if (undefRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); @@ -153,7 +153,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); if (undefRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback is undef"); @@ -195,7 +195,7 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); if (undefRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undef, return"); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index c0546f27b1..4f0811c733 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -207,6 +207,7 @@ void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_re std::lock_guard lock(mtx_); if (IsCallbackRegistered(env, typeString, cbRef)) { TLOGI(WmsLogTag::DMS, "[ANI] type %{public}s callback already registered!", typeString.c_str()); + env->GlobalReference_Delete(cbRef); return; } TLOGI(WmsLogTag::DMS, "[ANI] onRegisterCallback"); @@ -217,11 +218,13 @@ void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_re std::string errMsg = "[ANI] failed to register display listener with type, cbk null or undefined"; TLOGE(WmsLogTag::DMS, "callbackNull or undefined"); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); + env->GlobalReference_Delete(cbRef); return; } sptr displayAniListener = new(std::nothrow) DisplayAniListener(env); if (displayAniListener == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI]displayListener is nullptr"); + env->GlobalReference_Delete(cbRef); AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, "displayListener is nullptr"); return; } @@ -231,6 +234,7 @@ void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_re ret = ProcessRegisterCallback(env, typeString, displayAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register display listener with type, errcode: %{public}d", ret); + env->GlobalReference_Delete(cbRef); std::string errMsg = "Failed to register display listener with type"; AniErrUtils::ThrowBusinessError(env, ret, errMsg); return; @@ -329,6 +333,7 @@ void DisplayManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_ TLOGE(WmsLogTag::DMS, "[ANI] failed to unregister display listener with type"); AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, errMsg); } + env->GlobalReference_Delete(cbRef); } DMError DisplayManagerAni::UnRegisterDisplayListenerWithType(std::string type, ani_env* env, ani_ref callback) diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 5614fb54d5..b03fe40c11 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -97,7 +97,7 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); // judge is null or undefined if (undefRes) { @@ -144,7 +144,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); // judge is null or undefined if (undefRes) { @@ -191,7 +191,7 @@ void ScreenAniListener::OnChange(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] null env"); return; } - ani_boolean undefRes; + ani_boolean undefRes = 0; env_->Reference_IsUndefined(oneAniCallback, &undefRes); if (undefRes) { TLOGE(WmsLogTag::DMS, "[ANI] oneAniCallback undefRes, continue"); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index e904897963..8d6e357316 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -63,20 +63,22 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref ScreenAniUtils::GetStdString(env, type, typeString); if (env->GlobalReference_Create(callback, &cbRef) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] create global ref fail"); + env->GlobalReference_Delete(cbRef); return; } std::lock_guard lock(mtx_); if (IsCallbackRegistered(env, typeString, cbRef)) { TLOGI(WmsLogTag::DMS, "[ANI] type %{public}s callback already registered!", typeString.c_str()); + env->GlobalReference_Delete(cbRef); return; } TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_boolean callbackUndefined = 0; env->Reference_IsUndefined(cbRef, &callbackUndefined); - DmErrorCode ret; if (callbackUndefined) { - std::string errMsg = "[ANI] failed to register screen listener with type, cbk null or undefined"; TLOGE(WmsLogTag::DMS, "undefined"); + env->GlobalReference_Delete(cbRef); + std::string errMsg = "[ANI] failed to register screen listener with type, cbk null or undefined"; AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, errMsg); return; } @@ -84,14 +86,16 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref sptr screenAniListener = new(std::nothrow) ScreenAniListener(env); if (screenAniListener == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] screenListener is nullptr"); + env->GlobalReference_Delete(cbRef); AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, "screenListener is nullptr"); return; } screenAniListener->AddCallback(typeString, cbRef); screenAniListener->SetMainEventHandler(); - ret = ProcessRegisterCallback(env, typeString, screenAniListener); + DmErrorCode ret = ProcessRegisterCallback(env, typeString, screenAniListener); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] register screen listener with type, errcode: %{public}d", ret); + env->GlobalReference_Delete(cbRef); std::string errMsg = "Failed to register screen listener with type"; AniErrUtils::ThrowBusinessError(env, ret, errMsg); return; @@ -188,6 +192,7 @@ DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani if (jsCbMap_[type].empty()) { jsCbMap_.erase(type); } + env->GlobalReference_Delete(cbRef); return ret; } -- Gitee From 82e3340506c927c55a71b21a25718bcd181246ea Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Tue, 29 Jul 2025 18:11:17 +0800 Subject: [PATCH 053/109] ani bugfix Signed-off-by: zhangweihua --- .../display_runtime/display_ani/src/display_ani_listener.cpp | 2 +- .../ani/display_runtime/display_ani/src/display_ani_manager.cpp | 2 +- .../ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index 1646fae8bb..fc793a0c11 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -72,7 +72,7 @@ void DisplayAniListener::RemoveCallback(ani_env* env, const std::string& type, a void DisplayAniListener::RemoveAllCallback() { std::lock_guard lock(aniCallbackMtx_); - for (auto& [typeString, callbacks] : aniCallback_) { + for (const auto& [typeString, callbacks] : aniCallback_) { for (auto callback : callbacks) { if (env_) { env_->GlobalReference_Delete(callback); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index 4f0811c733..e4d5ea360a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -221,7 +221,7 @@ void DisplayManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_re env->GlobalReference_Delete(cbRef); return; } - sptr displayAniListener = new(std::nothrow) DisplayAniListener(env); + sptr displayAniListener = sptr::MakeSptr(env); if (displayAniListener == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI]displayListener is nullptr"); env->GlobalReference_Delete(cbRef); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 8d6e357316..e81507856d 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -58,6 +58,7 @@ void ScreenManagerAni::UnRegisterCallback(ani_env* env, ani_string type, ani_lon void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_ref cbRef{}; std::string typeString; ScreenAniUtils::GetStdString(env, type, typeString); @@ -72,7 +73,6 @@ void ScreenManagerAni::OnRegisterCallback(ani_env* env, ani_string type, ani_ref env->GlobalReference_Delete(cbRef); return; } - TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_boolean callbackUndefined = 0; env->Reference_IsUndefined(cbRef, &callbackUndefined); if (callbackUndefined) { -- Gitee From 90ae26635dcdd4d6425bacfbc3b1432264233845 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Wed, 30 Jul 2025 12:45:54 +0800 Subject: [PATCH 054/109] add shiftappfocus Signed-off-by: chuanstudy --- .../include/ani_window_manager.h | 2 +- .../src/ani_window_manager.cpp | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h index 14e2e6285f..7ac8139371 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_manager.h @@ -41,7 +41,7 @@ public: static void MinimizeAll(ani_env* env, ani_long nativeObj, ani_long displayId); static void RegisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); - static void ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, + static void ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, ani_int sourceWindowId, ani_int targetWindowId); private: ani_object OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 65a80e9afb..615ceeac7d 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -426,17 +426,23 @@ void AniWindowManager::OnUnregisterWindowManagerCallback(ani_env* env, ani_strin } } -void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_object obj, ani_long nativeObj, - ani_int sourceWindowId, ani_int targetWindowId) +void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, + ani_double sourceWindowId, ani_double targetWindowId) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", + static_cast(sourceWindowId), static_cast(targetWindowId)); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); - aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); + if (aniWindowManager != nullptr){ + aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); + } else { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowManager is nullptr"); + } } -void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowId, ani_int targetWindowId) +void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", + static_cast(sourceWindowId), static_cast(targetWindowId)); WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().ShiftAppWindowFocus(sourceWindowId, targetWindowId)); if (ret != WmErrorCode::WM_OK) { -- Gitee From 2355929b4fee87f9380299952721ecf9d5e76108 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Wed, 30 Jul 2025 12:47:31 +0800 Subject: [PATCH 055/109] add Signed-off-by: chuanstudy --- .../window_stage_ani/src/ani_window_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 615ceeac7d..d82acf7981 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -427,7 +427,7 @@ void AniWindowManager::OnUnregisterWindowManagerCallback(ani_env* env, ani_strin } void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, - ani_double sourceWindowId, ani_double targetWindowId) + ani_int sourceWindowId, ani_int targetWindowId) { TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", static_cast(sourceWindowId), static_cast(targetWindowId)); @@ -439,7 +439,7 @@ void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, } } -void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_double sourceWindowId, ani_double targetWindowId) +void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowId, ani_int targetWindowId) { TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", static_cast(sourceWindowId), static_cast(targetWindowId)); -- Gitee From b393fd22aa2f307738b32b15a1d44587bf250b49 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Wed, 30 Jul 2025 06:58:37 +0000 Subject: [PATCH 056/109] update interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp. Signed-off-by: chuanstudy --- .../window_stage_ani/src/ani_window_manager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index d82acf7981..9f0d1f1f3a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -429,10 +429,8 @@ void AniWindowManager::OnUnregisterWindowManagerCallback(ani_env* env, ani_strin void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, ani_int sourceWindowId, ani_int targetWindowId) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", - static_cast(sourceWindowId), static_cast(targetWindowId)); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); - if (aniWindowManager != nullptr){ + if (aniWindowManager != nullptr) { aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); } else { TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowManager is nullptr"); -- Gitee From 8ff06427d4123340c1454ff59ff44af5f05e480e Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Wed, 30 Jul 2025 07:01:48 +0000 Subject: [PATCH 057/109] update interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp. Signed-off-by: chuanstudy --- .../window_runtime/window_stage_ani/src/ani_window_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 9f0d1f1f3a..3a1baac77a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -439,7 +439,7 @@ void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowId, ani_int targetWindowId) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", + TLOGI(WmsLogTag::WMS_FOCUS, "[ANI] sourceWindowId: %{public}d targetWindowId: %{public}d", static_cast(sourceWindowId), static_cast(targetWindowId)); WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().ShiftAppWindowFocus(sourceWindowId, targetWindowId)); -- Gitee From 7d807d2adc89ac4b17ce286cdb4f1d4b07f51829 Mon Sep 17 00:00:00 2001 From: chuanstudy Date: Wed, 30 Jul 2025 07:14:19 +0000 Subject: [PATCH 058/109] update interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp. Signed-off-by: chuanstudy --- .../window_runtime/window_stage_ani/src/ani_window_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 3a1baac77a..9749d3862e 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -433,7 +433,7 @@ void AniWindowManager::ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, if (aniWindowManager != nullptr) { aniWindowManager->OnShiftAppWindowFocus(env, sourceWindowId, targetWindowId); } else { - TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowManager is nullptr"); + TLOGE(WmsLogTag::WMS_FOCUS, "[ANI] aniWindowManager is nullptr"); } } -- Gitee From a47c0dd3afd76bee1293eb2611b0210f08303c78 Mon Sep 17 00:00:00 2001 From: yanzhimo Date: Tue, 29 Jul 2025 12:47:48 +0800 Subject: [PATCH 059/109] ani interface -- onRotationChange and offRotationChange Signed-off-by: yanzhimo --- .../window_stage_ani/ets/@ohos.window.ets | 93 +++++++++++++ .../include/ani_window_listener.h | 6 +- .../include/ani_window_register_manager.h | 3 + .../include/ani_window_utils.h | 7 + .../src/ani_window_listener.cpp | 32 +++++ .../src/ani_window_register_manager.cpp | 22 +++ .../window_stage_ani/src/ani_window_utils.cpp | 127 ++++++++++++++++++ 7 files changed, 289 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 089a349e3f..68310bdef9 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -692,6 +692,16 @@ export enum ModalityType { APPLICATION_MODALITY = 1 } +export enum RotationChangeType { + WINDOW_WILL_ROTATE = 0, + WINDOW_DID_ROTATE = 1 +} + +export enum RectType { + RELATIVE_TO_SCREEN = 0, + RELATIVE_TO_PARENT_WINDOW = 1 +} + export interface SystemBarProperties { /** * The color of the status bar. @@ -1741,6 +1751,89 @@ export class TranslateOptionsInternal implements TranslateOptions { z?: double; } +/** + * Rotation change info + * + * @interface RotationChangeInfo + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ +export interface RotationChangeInfo { + /** + * Rotation change type + * + * @type { RotationChangeType } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + type: RotationChangeType; + /** + * window orientation + * + * @type { int } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + orientation: int; + /** + * Display id + * + * @type { long } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + displayId: long; + /** + * Display rect + * + * @type { Rect } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + displayRect: Rect; +} + +export class RotationChangeInfoInternal implements RotationChangeInfo { + type: RotationChangeType; + orientation: int; + displayId: long; + displayRect: Rect; +} + +/** + * Rotation change result + * + * @interface RotationChangeResult + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ +export interface RotationChangeResult { + /** + * Rect type + * + * @type { RectType } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + rectType: RectType; + /** + * Window Rect + * + * @type { Rect } + * @syscap SystemCapability.Window.SessionManager + * @atomicservice + * @since 19 + */ + windowRect: Rect; +} + export class WindowStageInternal implements WindowStage { static { loadLibrary('windowstageani_module.z') } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 52a4b7aa83..00b93821c5 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -55,6 +55,7 @@ const std::string WINDOW_HIGHLIGHT_CHANGE_CB = "windowHighlightChange"; const std::string WINDOW_STAGE_CLOSE_CB = "windowStageClose"; const std::string SYSTEM_DENSITY_CHANGE_CB = "systemDensityChange"; const std::string WINDOW_DISPLAYID_CHANGE_CB = "displayIdChange"; +const std::string WINDOW_ROTATION_CHANGE_CB = "rotationChange"; class AniWindowListener : public IWindowChangeListener, public ISystemBarChangedListener, @@ -78,7 +79,8 @@ class AniWindowListener : public IWindowChangeListener, public ISubWindowCloseListener, public IWindowHighlightChangeListener, public ISystemDensityChangeListener, - public IDisplayIdChangeListener { + public IDisplayIdChangeListener, + public IWindowRotationChangeListener { public: AniWindowListener(ani_env* env, ani_ref callback, CaseType caseType) : env_(env), aniCallback_(callback), caseType_(caseType), @@ -123,6 +125,8 @@ public: void OnMainWindowClose(bool& terminateCloseProcess) override; void SetTimeout(int64_t timeout) override; int64_t GetTimeout() const override; + void OnRotationChange(const RotationChangeInfo& rotationChangeInfo, + RotationChangeResult& rotationChangeResult) override; private: void OnLastStrongRef(const void *) override; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 73c62e4fab..fba67d90b7 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -51,6 +51,7 @@ enum class RegisterListenerType : uint32_t { WINDOW_STAGE_CLOSE_CB, SYSTEM_DENSITY_CHANGE_CB, WINDOW_DISPLAYID_CHANGE_CB, + WINDOW_ROTATION_CHANGE_CB, }; class AniWindowRegisterManager { @@ -111,6 +112,8 @@ private: bool isRegister, ani_env* env); WmErrorCode ProcessMainWindowCloseRegister(const sptr& listener, const sptr& window, bool isRegister, ani_env* env); + WmErrorCode ProcessWindowRotationChangeRegister(const sptr& listener, const sptr& window, + bool isRegister, ani_env* env); WmErrorCode ProcessListener(RegisterListenerType registerListenerType, CaseType caseType, const sptr& windowManagerListener, const sptr& window, bool isRegister, ani_env* env, ani_long timeout); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index eed09e859c..48dd25e28a 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -264,6 +264,9 @@ public: static ani_status GetPropertyIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); static ani_status GetPropertyDoubleObject(ani_env* env, const char* propertyName, ani_object object, double& result); + static ani_status GetPropertyRectObject(ani_env* env, const char* propertyName, + ani_object object, Rect& result); + static ani_status GetIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); static ani_status GetDoubleObject(ani_env* env, ani_object double_object, double& result); static ani_status NewAniObjectNoParams(ani_env* env, const char* cls, ani_object* object); static ani_status NewAniObject(ani_env* env, const char* cls, const char* signature, ani_object* result, ...); @@ -279,7 +282,11 @@ public: static ani_object CreateAniKeyboardInfo(ani_env* env, const KeyboardPanelInfo& keyboardPanelInfo); static ani_object CreateAniSystemBarTintState(ani_env* env, DisplayId displayId, const SystemBarRegionTints& tints); static ani_object CreateAniSystemBarRegionTint(ani_env* env, const SystemBarRegionTint& tint); + static ani_object CreateAniRotationChangeInfo(ani_env* env, const RotationChangeInfo& info); + static void ParseRotationChangeResult(ani_env* env, ani_object obj, RotationChangeResult& rotationChangeResult); static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, const char* func, const char* signature, ...); + static ani_status CallAniFunctionRef(ani_env *env, ani_ref& result, ani_ref ani_callback, + const int32_t args_num, ...); static ani_status CallAniMethodVoid(ani_env* env, ani_object object, const char* cls, const char* method, const char* signature, ...); static ani_status CallAniMethodVoid(ani_env* env, ani_object object, ani_class cls, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 34f512a69c..0b11ea9529 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -532,5 +532,37 @@ void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) void AniWindowListener::OnMainWindowClose(bool& terminateCloseProcess) { } + +void AniWindowListener::OnRotationChange(const RotationChangeInfo& rotationChangeInfo, + RotationChangeResult& rotationChangeResult) +{ + TLOGI(WmsLogTag::WMS_ROTATION, "[ANI]"); + auto task = [self = weakRef_, eng = env_, rotationChangeInfo, &rotationChangeResult] { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "AniWindowListener::OnRotationChange"); + auto thisListener = self.promote(); + if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI]this listener, eng or callback is nullptr"); + return; + } + ani_object rotationInfoObj = AniWindowUtils::CreateAniRotationChangeInfo(eng, rotationChangeInfo); + if (rotationInfoObj == nullptr) { + TLOGE(WmsLogTag::WMS_ROTATION, "failed to create ani object"); + return; + } + ani_ref rotationChangeResultObj; + AniWindowUtils::CallAniFunctionRef(eng, rotationChangeResultObj, thisListener->aniCallback_, 1, + rotationInfoObj); + if (rotationChangeResultObj != nullptr) { + AniWindowUtils::ParseRotationChangeResult(eng, static_cast(rotationChangeResultObj), + rotationChangeResult); + } + }; + if (!eventHandler_ || + (eventHandler_->GetEventRunner() && eventHandler_->GetEventRunner()->IsCurrentRunnerThread())) { + TLOGE(WmsLogTag::WMS_ROTATION, "get main event handler failed or current is already main thread!"); + return task(); + } + eventHandler_->PostSyncTask(task, __func__, AppExecFwk::EventQueue::Priority::IMMEDIATE); +} } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp index 98179d4a9c..4bc13af260 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_register_manager.cpp @@ -52,6 +52,7 @@ const std::map WINDOW_LISTENER_MAP { {WINDOW_HIGHLIGHT_CHANGE_CB, RegisterListenerType::WINDOW_HIGHLIGHT_CHANGE_CB}, {WINDOW_DISPLAYID_CHANGE_CB, RegisterListenerType::WINDOW_DISPLAYID_CHANGE_CB}, {SYSTEM_DENSITY_CHANGE_CB, RegisterListenerType::SYSTEM_DENSITY_CHANGE_CB}, + {WINDOW_ROTATION_CHANGE_CB, RegisterListenerType::WINDOW_ROTATION_CHANGE_CB}, }; const std::map WINDOW_STAGE_LISTENER_MAP { // white register list for window stage @@ -519,6 +520,8 @@ WmErrorCode AniWindowRegisterManager::ProcessListener(RegisterListenerType regis return ProcessSystemDensityChangeRegister(windowManagerListener, window, isRegister, env); case static_cast(RegisterListenerType::WINDOW_DISPLAYID_CHANGE_CB): return ProcessDisplayIdChangeRegister(windowManagerListener, window, isRegister, env); + case static_cast(RegisterListenerType::WINDOW_ROTATION_CHANGE_CB): + return ProcessWindowRotationChangeRegister(windowManagerListener, window, isRegister, env); default: TLOGE(WmsLogTag::DEFAULT, "[ANI]RegisterListenerType %{public}u is not supported", static_cast(registerListenerType)); @@ -686,5 +689,24 @@ WmErrorCode AniWindowRegisterManager::ProcessMainWindowCloseRegister(const sptr< } return ret; } + +WmErrorCode AniWindowRegisterManager::ProcessWindowRotationChangeRegister(const sptr& listener, + const sptr& window, bool isRegister, ani_env* env) +{ + if (window == nullptr || listener == nullptr) { + return WmErrorCode::WM_ERROR_STATE_ABNORMALLY; + } + sptr thisListener(listener); + WmErrorCode ret = WmErrorCode::WM_OK; + if (window->IsPcWindow()) { + return WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT; + } + if (isRegister) { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->RegisterWindowRotationChangeListener(thisListener)); + } else { + ret = WM_JS_TO_ERROR_CODE_MAP.at(window->UnregisterWindowRotationChangeListener(thisListener)); + } + return ret; +} } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index c263c1c574..25bd1e60b5 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -148,6 +148,47 @@ ani_status AniWindowUtils::GetPropertyDoubleObject(ani_env* env, const char* pro return ret; } +ani_status AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* propertyName, + ani_object object, Rect& result) +{ + ani_ref windowRect; + ani_status ret = env->Object_GetPropertyByName_Ref(object, propertyName, &windowRect); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed, ret : %{public}u", + propertyName, static_cast(ret)); + return ret; + } + + int32_t posX; + int32_t posY; + int32_t width; + int32_t height; + GetIntObject(env, "left", static_cast(windowRect), posX); + GetIntObject(env, "top", static_cast(windowRect), posY); + GetIntObject(env, "width", static_cast(windowRect), width); + GetIntObject(env, "height", static_cast(windowRect), height); + result.posX_ = posX; + result.posY_ = posY; + result.width_ = width; + result.height_ = height; + return ret; +} + +ani_status AniWindowUtils::GetIntObject(ani_env* env, const char* propertyName, + ani_object object, int32_t& result) +{ + ani_int int_value; + ani_status ret = env->Object_GetPropertyByName_Int(object, propertyName, &int_value); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Int %{public}s Failed, ret : %{public}u", + propertyName, static_cast(ret)); + return ret; + } + result = static_cast(int_value); + TLOGI(WmsLogTag::DEFAULT, "[ANI] %{public}s is: %{public}u", propertyName, result); + return ret; +} + ani_status AniWindowUtils::GetDoubleObject(ani_env* env, ani_object double_object, double& result) { ani_boolean isUndefined; @@ -512,6 +553,73 @@ ani_object AniWindowUtils::CreateAniSystemBarRegionTint(ani_env* env, const Syst return regionTint; } +ani_object AniWindowUtils::CreateAniRotationChangeInfo(ani_env* env, const RotationChangeInfo& info) +{ + TLOGI(WmsLogTag::WMS_ROTATION, "[ANI]"); + ani_class aniClass; + ani_status ret = env->FindClass("L@ohos/window/window/RotationChangeInfoInternal;", &aniClass); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method aniCtor; + ret = env->Class_FindMethod(aniClass, "", nullptr, &aniCtor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object RotationChangeInfo; + ret = env->Object_New(aniClass, aniCtor, &RotationChangeInfo); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] failed to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_enum rotationChangeType; + ret = env->FindEnum("L@ohos/window/window/RotationChangeType;", &rotationChangeType); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] failed to FindEnum"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_enum_item rotationChangeTypeItem; + std::string itemName = + info.type_ == RotationChangeType::WINDOW_WILL_ROTATE? "WINDOW_WILL_ROTATE" : "WINDOW_DID_ROTATE"; + ret = env->Enum_GetEnumItemByName(rotationChangeType, itemName.c_str(), &rotationChangeTypeItem); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] Enum_GetEnumItemByName failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, RotationChangeInfo, aniClass, "type", nullptr, + rotationChangeTypeItem); + CallAniMethodVoid(env, RotationChangeInfo, aniClass, "orientation", nullptr, + ani_int(info.orientation_)); + CallAniMethodVoid(env, RotationChangeInfo, aniClass, "displayId", nullptr, + ani_long(info.displayId_)); + CallAniMethodVoid(env, RotationChangeInfo, aniClass, "displayRect", nullptr, + CreateAniRect(env, info.displayRect_)); + return RotationChangeInfo; +} + +void AniWindowUtils::ParseRotationChangeResult(ani_env* env, ani_object obj, RotationChangeResult& rotationChangeResult) +{ + ani_ref rectTypeRef; + ani_status ret = env->Object_GetPropertyByName_Ref(obj, "rectType", &rectTypeRef); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] Object_GetPropertyByName_Ref failed, ret: %{public}d", ret); + return; + } + ani_int rectType; + ret = env->EnumItem_GetValue_Int(static_cast(rectTypeRef), &rectType); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] EnumItem_GetValue_Int failed, ret: %{public}d", ret); + return; + } + + Rect windowRect; + GetPropertyRectObject(env, "windowRect", obj, windowRect); + rotationChangeResult.rectType_ = static_cast(rectType); + rotationChangeResult.windowRect_ = windowRect; +} + ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...) { @@ -537,6 +645,25 @@ ani_status AniWindowUtils::CallAniFunctionVoid(ani_env *env, const char* ns, return ret; } +ani_status AniWindowUtils::CallAniFunctionRef(ani_env *env, ani_ref& result, + ani_ref ani_callback, const int32_t args_num, ...) +{ + va_list args; + va_start(args, args_num); + std::vector vec; + for (int i = 0; i < args_num; i++) { + vec.push_back(va_arg(args, ani_object)); + } + va_end(args); + ani_status ret = env->FunctionalObject_Call(static_cast(ani_callback), ani_size(args_num), + vec.data(), &result); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI]cannot run callback %{public}d", ret); + return ret; + } + return ret; +} + ani_status AniWindowUtils::CallAniMethodVoid(ani_env *env, ani_object object, const char* cls, const char* method, const char* signature, ...) { -- Gitee From 2c423fc8e7514bfc6a24acf01924546ca1708494 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Thu, 31 Jul 2025 11:18:33 +0800 Subject: [PATCH 060/109] DMS ANI stage2 bug fix Signed-off-by: chenpeng --- .../screen_ani/src/screen_ani_manager.cpp | 7 ++-- .../kits/ani/screenshot_runtime/BUILD.gn | 2 +- .../screenshot_ani/ets/@ohos.screenshot.ets | 2 +- .../include/screenshot_ani_manager.h | 3 +- .../src/screenshot_ani_manager.cpp | 38 +++++++++---------- .../src/screenshot_ani_utils.cpp | 22 +++++------ 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index e81507856d..99c660ed19 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -223,10 +223,10 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); for (uint32_t i = 0; i < length; i++) { ani_double screenId; - if (ANI_OK != env->Object_CallMethodByName_Double(mirrorScreen, "$_get", "I:D", - &screenId, (ani_int)i)) { + if (ANI_OK != env->Object_CallMethodByName_Double(mirrorScreen, "$_get", "I:D", &screenId, (ani_double)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); - return AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to get screenId"); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to get screenId"); + return static_cast(INVALID_SCREEN_ID); } screenIds.emplace_back(static_cast(screenId)); } @@ -236,6 +236,7 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani screenIds, screenGroupId)); if (ret != DmErrorCode::DM_OK) { AniErrUtils::ThrowBusinessError(env, ret, "JsScreenManager::OnMakeMirror failed."); + return static_cast(INVALID_SCREEN_ID); } return static_cast(screenGroupId); } diff --git a/interfaces/kits/ani/screenshot_runtime/BUILD.gn b/interfaces/kits/ani/screenshot_runtime/BUILD.gn index 2b356dc46f..93efca549c 100644 --- a/interfaces/kits/ani/screenshot_runtime/BUILD.gn +++ b/interfaces/kits/ani/screenshot_runtime/BUILD.gn @@ -71,7 +71,7 @@ ohos_shared_library("screenshotani_kit") { "hilog:libhilog", "hitrace:hitrace_meter", "image_framework:image", - "image_framework:image_ani", + "image_framework:image_taihe", "image_framework:image_native", "runtime_core:ani", ] diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets index f02a846493..03b0ff4534 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -46,7 +46,7 @@ export function save(callback: AsyncCallback): void export function save(options?: ScreenshotOptions): Promise { return new Promise((resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void ) => { taskpool.execute((): image.PixelMap => { - let res: image.PixelMap = saveSync(); + let res: image.PixelMap = saveSync(options); return res; }).then((ret: NullishType) => { resolve(ret as image.PixelMap); diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h index 4bad459c6a..b4f8de33a2 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h @@ -19,7 +19,6 @@ #include "dm_common.h" #include "refbase.h" #include "pixel_map.h" -#include "pixel_map_ani.h" #include "ani.h" @@ -31,7 +30,7 @@ struct Option { int rotation = 0; DisplayId displayId = 0; bool isNeedNotify = true; - bool isNeedPointer = true; + bool isCaptureFullOfScreen = true; }; struct Param { diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp index b3d7b026e3..265c2d587a 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp @@ -22,7 +22,7 @@ #include "window_manager_hilog.h" #include "display_manager.h" #include "dm_common.h" -#include "pixel_map_ani.h" +#include "pixel_map_taihe_ani.h" #include "refbase.h" #include "screenshot_ani_utils.h" #include "ani_err_utils.h" @@ -52,29 +52,24 @@ ani_object ScreenshotManagerAni::Save(ani_env* env, ani_object options) param->useInputOption = true; ScreenshotAniUtils::GetScreenshotParam(env, param, options); } + param->isPick = false; GetScreenshot(env, param); - std::shared_ptr pixelMap = param->image; - if (pixelMap == nullptr) { - TLOGI(WmsLogTag::DMS, "snapshot save pixelMap null"); - AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); - return ScreenshotAniUtils::CreateAniUndefined(env); - } - TLOGI(WmsLogTag::DMS, "snapshot save pixelMap, currentId = %{public}d", static_cast(pixelMap->currentId)); - auto nativePixelMap = Media::PixelMapAni::CreatePixelMap(env, pixelMap); - if (nativePixelMap == nullptr) { - TLOGI(WmsLogTag::DMS, "snapshot save nativePixelMap null"); - AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); + if (param->wret != DmErrorCode::DM_OK) { + if (param->wret == DmErrorCode::DM_ERROR_NO_PERMISSION || + param->wret == DmErrorCode::DM_ERROR_INVALID_PARAM || + param->wret == DmErrorCode::DM_ERROR_DEVICE_NOT_SUPPORT || + param->wret == DmErrorCode::DM_ERROR_SYSTEM_INNORMAL) { + AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); + } return ScreenshotAniUtils::CreateAniUndefined(env); } - ani_double wid; - if (ANI_OK != env->Object_GetPropertyByName_Double(options, "isNeedNotify", &wid)) { - TLOGE(WmsLogTag::DMS, "[ANI] get isNeedNotify fail"); + if (param->image != nullptr) { + TLOGI(WmsLogTag::DMS, "save pixelMap, currentId = %{public}d", static_cast(param->image->currentId)); } - TLOGI(WmsLogTag::DMS, "snapshot save function exe success"); + auto nativePixelMap = Media::PixelMapTaiheAni::CreateEtsPixelMap(env, param->image); return nativePixelMap; } - void ScreenshotManagerAni::GetScreenshot(ani_env *env, std::unique_ptr ¶m) { if (!param->validInputParam) { @@ -84,8 +79,9 @@ void ScreenshotManagerAni::GetScreenshot(ani_env *env, std::unique_ptr &p param->errMessage = "Get Screenshot Failed: Invalid input param"; return; } - CaptureOption option = { param->option.displayId, param->option.isNeedNotify, param->option.isNeedPointer}; - if (!param->isPick && (!option.isNeedNotify_ || !option.isNeedPointer_)) { + CaptureOption option = { param->option.displayId, param->option.isNeedNotify, true, + param->option.isCaptureFullOfScreen }; + if (!param->isPick && !option.isNeedNotify_) { if (param->useInputOption) { param->image = DisplayManager::GetInstance().GetScreenshotWithOption(option, param->option.rect, param->option.size, param->option.rotation, ¶m->wret); @@ -100,13 +96,15 @@ void ScreenshotManagerAni::GetScreenshot(ani_env *env, std::unique_ptr &p snapConfig.imageRect_ = param->option.rect; snapConfig.imageSize_ = param->option.size; snapConfig.rotation_ = param->option.rotation; + snapConfig.isCaptureFullOfScreen_ = param->option.isCaptureFullOfScreen; param->image = DisplayManager::GetInstance().GetScreenshotwithConfig(snapConfig, ¶m->wret, true); } else if (param->isPick) { TLOGI(WmsLogTag::DMS, "Get Screenshot by picker"); param->image = DisplayManager::GetInstance().GetSnapshotByPicker(param->imageRect, ¶m->wret); } else { TLOGI(WmsLogTag::DMS, "Get Screenshot by default option"); - param->image = DisplayManager::GetInstance().GetScreenshot(param->option.displayId, ¶m->wret, true); + param->image = DisplayManager::GetInstance().GetScreenshot(param->option.displayId, ¶m->wret, true, + param->option.isCaptureFullOfScreen); } } if (param->image == nullptr && param->wret == DmErrorCode::DM_OK) { diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp index a39e328729..6e6eeb9614 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -96,18 +96,18 @@ void ScreenshotAniUtils::GetScreenshotParam(ani_env *env, std::unique_ptr TLOGI(WmsLogTag::DMS, "[ANI] null param"); return; } - ani_double displayId; + ani_double displayId = 0; env->Object_GetPropertyByName_Double(options, "displayId", &displayId); param->option.displayId = static_cast(displayId); - ani_double rotation; + ani_double rotation = 0; env->Object_GetPropertyByName_Double(options, "rotation", &rotation); param->option.rotation = static_cast(rotation); - ani_double isNeedNotify; - env->Object_GetPropertyByName_Double(options, "isNeedNotify", &isNeedNotify); + ani_boolean isNeedNotify = true; + env->Object_GetPropertyByName_Boolean(options, "isNotificationNeeded", &isNeedNotify); param->option.isNeedNotify = static_cast(isNeedNotify); - ani_double isNeedPointer; - env->Object_GetPropertyByName_Double(options, "isNeedPointer", &isNeedPointer); - param->option.isNeedPointer = static_cast(isNeedPointer); + ani_boolean isCaptureFullOfScreen = false; + env->Object_GetPropertyByName_Boolean(options, "isCaptureFullOfScreen", &isCaptureFullOfScreen); + param->option.isCaptureFullOfScreen = static_cast(isCaptureFullOfScreen); GetScreenshotSize(env, param, options); GetScreenshotRect(env, param, options); } @@ -130,10 +130,10 @@ void ScreenshotAniUtils::GetScreenshotRect(ani_env *env, std::unique_ptr { ani_ref obj; env->Object_GetPropertyByName_Ref(options, "screenRect", &obj); - ani_double left; - ani_double top; - ani_double width; - ani_double height; + ani_double left = 0; + ani_double top = 0; + ani_double width = 0; + ani_double height = 0; env->Object_GetPropertyByName_Double(static_cast(obj), "left", &left); env->Object_GetPropertyByName_Double(static_cast(obj), "top", &top); env->Object_GetPropertyByName_Double(static_cast(obj), "width", &width); -- Gitee From b04c01841b4ba512fe0ecc8dd4c87c28b454ec51 Mon Sep 17 00:00:00 2001 From: liuanguang Date: Thu, 31 Jul 2025 16:54:21 +0800 Subject: [PATCH 061/109] fix(wms-layout): fix error code issues in ANI Resize, MoveWindowTo, and GetGlobalRect Signed-off-by: liuanguang --- .../window_stage_ani/include/ani_window.h | 4 + .../include/ani_window_utils.h | 11 +++ .../window_stage_ani/src/ani_window.cpp | 75 +++++++++++++------ .../window_stage_ani/src/ani_window_utils.cpp | 12 +++ 4 files changed, 80 insertions(+), 22 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index b3ad206cd0..434c511f26 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -96,6 +96,10 @@ public: void Minimize(ani_env* env); void HideWindowFunction(ani_env* env, WmErrorCode errCode); void Maximize(ani_env* env, ani_int presentation); + + /* + * Window Layout + */ void Resize(ani_env* env, ani_int width, ani_int height); void MoveWindowTo(ani_env* env, ani_int x, ani_int y); ani_object GetGlobalRect(ani_env* env); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index eed09e859c..6bfb946709 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -319,6 +319,17 @@ public: std::map& newSystemBarProperties, std::map& systemBarProperties); + /** + * @brief Convert a WMError to its corresponding WmErrorCode. + * + * If the WMError is not found in the mapping, returns the given default code. + * + * @param error WMError value to convert. + * @param defaultCode Value to return if mapping is not found (default: WM_ERROR_STATE_ABNORMALLY). + * @return Corresponding WmErrorCode or defaultCode if unmapped. + */ + static WmErrorCode ToErrorCode(WMError error, WmErrorCode defaultCode = WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + private: static void SetSystemPropertiesWindowRect(ani_env* env, const sptr& window, ani_object& systemProperties, const char* clsName); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index ed3373ec35..42dda15475 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -1480,53 +1480,84 @@ void AniWindow::Maximize(ani_env* env, ani_int presentation) } } +/** @note @window.layout */ void AniWindow::Resize(ani_env* env, ani_int width, ani_int height) { if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is null"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - WMError ret = windowToken_->Resize(static_cast(width), static_cast(height)); - if (ret != WMError::WM_OK) { - TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] Resize set error, ret:%{public}d", ret); - AniWindowUtils::AniThrowError(env, ret); + const uint32_t w = static_cast(width); + const uint32_t h = static_cast(height); + const WMError ret = windowToken_->Resize(w, h); + const WmErrorCode errorCode = AniWindowUtils::ToErrorCode(ret); + + const uint32_t windowId = windowToken_->GetWindowId(); + if (errorCode != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, + "[ANI] Resize failed, windowId: %{public}u, width: %{public}u, height: %{public}u, ret: %{public}d", + windowId, w, h, static_cast(ret)); + AniWindowUtils::AniThrowError(env, errorCode); + return; } + + TLOGD(WmsLogTag::WMS_LAYOUT, "[ANI] Resize success, windowId: %{public}u, width: %{public}u, height: %{public}u", + windowId, w, h); + return; } +/** @note @window.layout */ void AniWindow::MoveWindowTo(ani_env* env, ani_int x, ani_int y) { if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is null"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - WMError ret = windowToken_->MoveTo(static_cast(x), static_cast(y)); - if (ret != WMError::WM_OK) { - TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] MoveWindowTo set error, ret:%{public}d", ret); - AniWindowUtils::AniThrowError(env, ret); + const int32_t targetX = static_cast(x); + const int32_t targetY = static_cast(y); + const WMError ret = windowToken_->MoveTo(targetX, targetY); + const WmErrorCode errorCode = AniWindowUtils::ToErrorCode(ret); + + const uint32_t windowId = windowToken_->GetWindowId(); + if (errorCode != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, + "[ANI] MoveWindowTo failed, windowId: %{public}u, x: %{public}d, y: %{public}d, ret: %{public}d", + windowId, targetX, targetY, static_cast(ret)); + AniWindowUtils::AniThrowError(env, errorCode); + return; } + + TLOGD(WmsLogTag::WMS_LAYOUT, "[ANI] MoveWindowTo success, windowId: %{public}u, x: %{public}d, y: %{public}d", + windowId, targetX, targetY); + return; } +/** @note @window.layout */ ani_object AniWindow::GetGlobalRect(ani_env* env) { - wptr weakToken(windowToken_); - auto window = weakToken.promote(); - if (window == nullptr) { - TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is nullptr"); + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] window is null"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } - Rect globalScaleRect{0, 0, 0, 0}; - WMError ret = window->GetGlobalScaledRect(globalScaleRect); - if (ret != WMError::WM_OK) { - if (ret == WMError::WM_ERROR_DEVICE_NOT_SUPPORT) { - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); - } - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + + Rect globalScaledRect = Rect::EMPTY_RECT; + const WMError ret = windowToken_->GetGlobalScaledRect(globalScaledRect); + const WmErrorCode errorCode = AniWindowUtils::ToErrorCode(ret); + + const uint32_t windowId = windowToken_->GetWindowId(); + if (errorCode != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI] GetGlobalRect failed, windowId: %{public}u, ret: %{public}d", + windowId, static_cast(ret)); + return AniWindowUtils::AniThrowError(env, errorCode); } - TLOGI(WmsLogTag::WMS_LAYOUT, "[ANI] Window [%{public}u, %{public}s] globalScaleRect: %{public}s", - window->GetWindowId(), window->GetWindowName().c_str(), globalScaleRect.ToString().c_str()); - return AniWindowUtils::CreateAniRect(env, globalScaleRect); + + TLOGD(WmsLogTag::WMS_LAYOUT, "[ANI] Window [%{public}u, %{public}s], globalScaledRect: %{public}s", + windowId, windowToken_->GetWindowName().c_str(), globalScaledRect.ToString().c_str()); + return AniWindowUtils::CreateAniRect(env, globalScaledRect); } ani_double AniWindow::GetWindowDecorHeight(ani_env* env) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index c263c1c574..be7999a394 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -1073,5 +1073,17 @@ void AniWindowUtils::GetSpecificBarStatus(sptr& window, const std::strin systemBarProperties[type].settingFlag_ = systemBarProperties[type].settingFlag_ | SystemBarSettingFlag::ENABLE_SETTING; } + +WmErrorCode AniWindowUtils::ToErrorCode(WMError error, WmErrorCode defaultCode) +{ + auto it = WM_JS_TO_ERROR_CODE_MAP.find(error); + if (it != WM_JS_TO_ERROR_CODE_MAP.end()) { + return it->second; + } + TLOGW(WmsLogTag::DEFAULT, + "[ANI] Unknown error: %{public}d, return defaultCode: %{public}d", + static_cast(error), static_cast(defaultCode)); + return defaultCode; +} } // namespace Rosen } // namespace OHOS -- Gitee From 3e615a7c8599c57da359b08f1660289a513588d7 Mon Sep 17 00:00:00 2001 From: tanliang Date: Thu, 31 Jul 2025 16:14:25 +0800 Subject: [PATCH 062/109] =?UTF-8?q?WindowStage=E6=94=AF=E6=8C=81transfer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tanliang --- interfaces/kits/ani/window_runtime/BUILD.gn | 2 + .../window_stage_ani/ets/@ohos.window.ets | 21 +++++++ .../include/ani_window_stage.h | 2 + .../window_stage_ani/src/ani_window_stage.cpp | 60 +++++++++++++++++++ .../src/ani_window_stage_module.cpp | 6 +- .../window_stage_napi/js_window_stage.h | 2 + 6 files changed, 91 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index a50aef41e7..c2589ba485 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -63,6 +63,7 @@ ohos_shared_library("windowstageani_kit") { "../../../../utils:libwmutil", "../../../../utils:libwmutil_base", "../../../../wm:libwm", + "../../../../interfaces/kits/napi/window_runtime:windowstage_kit", ] external_deps = [ @@ -84,6 +85,7 @@ ohos_shared_library("windowstageani_kit") { "ipc:ipc_single", "napi:ace_napi", "runtime_core:ani", + "runtime_core:ani_helpers", ] innerapi_tags = [ "platformsdk" ] diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 089a349e3f..a394f0e289 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1749,6 +1749,8 @@ export class WindowStageInternal implements WindowStage { this.nativeObj = nativeObj; } + private static native nativeTransferStatic(input: ESValue): Object; + private static native nativeTransferDynamic(nativeObj: long): ESValue; public native setWindowRectAutoSave(nativeObj: long, enabled: boolean, isSaveBySpecifiedFlag: boolean): void; public native isWindowRectAutoSave(nativeObj: long): boolean; public native removeStartingWindow(nativeObj: long): void; @@ -1760,6 +1762,25 @@ export class WindowStageInternal implements WindowStage { native onSync(nativeObj: long, eventType: 'windowStageEvent', callback: Object): void; native offSync(nativeObj: long, eventType: 'windowStageEvent', callback?: Object): void; + public static transferStatic(input: Any): Object { + hilog.info(DOMAIN, TAG, 'transfer static, input:' + input); + let windowStage: ESValue = ESValue.wrap(input).getPropertySafe('windowStage_'); + if (windowStage !== ESValue.Undefined) { + return WindowStageInternal.nativeTransferStatic(windowStage); + } else { + return WindowStageInternal.nativeTransferStatic(ESValue.wrap(input)); + } + } + + public static transferDynamic(input: Object): Any { + hilog.info(DOMAIN, TAG, 'transfer dynamic, input:' + input); + if (input instanceof WindowStageInternal) { + return WindowStageInternal.nativeTransferDynamic((input as WindowStageInternal).nativeObj).unwrap(); + } else { + return undefined; + } + } + public setWindowRectAutoSave(enabled: boolean, isSaveBySpecifiedFlag: boolean): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h index e615db79ba..6edf8f9cba 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_stage.h @@ -32,6 +32,8 @@ class AniWindowStage { public: explicit AniWindowStage(const std::shared_ptr& windowScene); ~AniWindowStage(); + static ani_object NativeTransferStatic(ani_env* aniEnv, ani_class cls, ani_object input); + static ani_object NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_long nativeObj); static void LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage); static void DisableWindowDecor(ani_env* env, ani_object obj, ani_long nativeObj); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index c9b3f434d7..b649a43365 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -22,6 +22,11 @@ #include "ani_window.h" #include "ani_window_manager.h" #include "ani_window_utils.h" +#include "interop_js/arkts_esvalue.h" +#include "interop_js/arkts_interop_js_api.h" +#include "interop_js/hybridgref_ani.h" +#include "interop_js/hybridgref_napi.h" +#include "js_window_stage.h" #include "window_manager_hilog.h" #include "permission.h" #include "window_scene.h" @@ -45,6 +50,61 @@ AniWindowStage::~AniWindowStage() TLOGE(WmsLogTag::DEFAULT, "[ANI] Ani WindowStage died"); } +ani_object AniWindowStage::NativeTransferStatic(ani_env* aniEnv, ani_class cls, ani_object input) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + void *unwrapResult = nullptr; + if (!arkts_esvalue_unwrap(aniEnv, input, &unwrapResult)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] fail to unwrap input"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + if (unwrapResult == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] unwrapResult is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + JsWindowStage* jsWindowStage = static_cast(unwrapResult); + if (jsWindowStage == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] jsWindowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + std::shared_ptr windowScene = jsWindowStage->GetWindowScene().lock(); + return CreateAniWindowStage(aniEnv, windowScene); +} + +ani_object AniWindowStage::NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_long nativeObj) +{ + TLOGI(WmsLogTag::WMS_LIFE, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] aniWindowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + napi_env napiEnv {}; + if (!arkts_napi_scope_open(aniEnv, &napiEnv)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] napi scope open fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + napi_value jsWindowStage = CreateJsWindowStage(napiEnv, aniWindowStage->GetWindowScene().lock()); + hybridgref ref {}; + if (!hybridgref_create_from_napi(napiEnv, jsWindowStage, &ref)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] create hybridgref fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + ani_object result {}; + if (!hybridgref_get_esvalue(aniEnv, ref, &result)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] get esvalue fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + if (!hybridgref_delete_from_napi(napiEnv, ref)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] delete hybridgref fail"); + } + if (!arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr)) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] napi close scope fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + return result; +} + void AniWindowStage::LoadContent(ani_env* env, ani_object obj, ani_long nativeObj, ani_string path, ani_object storage) { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp index 259d9b4eb2..5bda6cd43c 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp @@ -94,7 +94,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) TLOGE(WmsLogTag::DEFAULT, "[ANI] null env"); return ANI_NOT_FOUND; } - ani_class cls = nullptr; if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] can't find class %{public}u", ret); @@ -122,6 +121,10 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, + ani_native_function {"nativeTransferStatic", "Lstd/interop/ESValue;:Lstd/core/Object;", + reinterpret_cast(AniWindowStage::NativeTransferStatic)}, + ani_native_function {"nativeTransferDynamic", "J:Lstd/interop/ESValue;", + reinterpret_cast(AniWindowStage::NativeTransferDynamic)}, }; for (auto method : methods) { if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { @@ -131,7 +134,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } } *result = ANI_VERSION_1; - AniWindowManager::AniWindowManagerInit(env); OHOS::Rosen::ANI_Window_Constructor(vm, result); return ANI_OK; diff --git a/interfaces/kits/napi/window_runtime/window_stage_napi/js_window_stage.h b/interfaces/kits/napi/window_runtime/window_stage_napi/js_window_stage.h index 91059a7924..9e3df492b8 100644 --- a/interfaces/kits/napi/window_runtime/window_stage_napi/js_window_stage.h +++ b/interfaces/kits/napi/window_runtime/window_stage_napi/js_window_stage.h @@ -73,6 +73,8 @@ public: */ static napi_value SetImageForRecent(napi_env env, napi_callback_info info); + std::weak_ptr GetWindowScene() { return windowScene_; } + private: napi_value OnSetUIContent(napi_env env, napi_callback_info info); napi_value OnGetMainWindow(napi_env env, napi_callback_info info); -- Gitee From b0f29b3f483c0ba640e8d75e4661f57b53f15e3b Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 16:43:28 +0800 Subject: [PATCH 063/109] getwindowproperties displayId Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 ++ .../window_runtime/window_stage_ani/src/ani_window_utils.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index a394f0e289..88fe103f89 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1132,6 +1132,7 @@ export class WindowPropertiesInternal implements WindowProperties { isTransparent: boolean; id: int; displayId?: long; + displayIdInternal: long; typeInternal: int; name?: string; } @@ -2338,6 +2339,7 @@ export class WindowInternal implements Window { public getWindowProperties(): WindowProperties { let windowProperties = this.getWindowProperties(this.nativeObj) as WindowPropertiesInternal; windowProperties.type = windowProperties.typeInternal as WindowType; + windowProperties.displayId = windowProperties.displayIdInternal; return windowProperties; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index c263c1c574..3a2d6315f5 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -733,7 +733,7 @@ void AniWindowUtils::SetSystemPropertiesDisplayId(ani_env* env, const sptrGetDisplayId(); - CallAniMethodVoid(env, systemProperties, clsName, "displayId", nullptr, + CallAniMethodVoid(env, systemProperties, clsName, "displayIdInternal", nullptr, static_cast(displayId)); } -- Gitee From a3995e426aeaeb53de38542d5b3392bb0262b139 Mon Sep 17 00:00:00 2001 From: yanxinyu7 Date: Tue, 5 Aug 2025 17:01:25 +0800 Subject: [PATCH 064/109] number to int Signed-off-by: yanxinyu7 --- .../window_runtime/window_stage_ani/ets/@ohos.window.ets | 8 ++++---- .../window_stage_ani/src/ani_window_listener.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 82609185e5..bbded9f933 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -25,7 +25,7 @@ export type WindowEventCallback = (data: window.WindowEventType) => void; export type WindowRectCallback = (data: window.Rect) => void; export type WindowSizeCallback = (data: window.Size) => void; export type WindowStatusCallback = (data: window.WindowStatusType) => void; -export type KeyboardHeightChangeCallback = (data: number) => void; +export type KeyboardHeightChangeCallback = (data: int) => void; export type KeyboardDidShowOrHideCallback = (data: window.KeyboardInfo) => void; export type WindowVoidCallback = () => void; const DOMAIN = 0x4200; @@ -3176,9 +3176,9 @@ function runWindowSizeCallback(cb: object, cbArg: object): void { func(cbArg as Size); } -function runKeyboardHeightChangeCallback(cb: object, cbArg: number): void { - const func = cb as (cbArg: number) => void; - func(cbArg as number); +function runKeyboardHeightChangeCallback(cb: object, cbArg: int): void { + const func = cb as (cbArg: int) => void; + func(cbArg as int); } function runKeyboardDidShowCallback(cb: object, cbArg: object): void { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 34f512a69c..355956f371 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -245,7 +245,7 @@ void AniWindowListener::OnSizeChange(const sptr& info, return; } AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallback", - nullptr, thisListener->aniCallback_, static_cast(info->rect_.height_)); + nullptr, thisListener->aniCallback_, static_cast(info->rect_.height_)); } void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanelInfo) -- Gitee From 214c225bf2aa097a2ec4e8c28cc092c6327d35a0 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 19:27:57 +0800 Subject: [PATCH 065/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 88fe103f89..5b6d94f9f8 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2349,6 +2349,7 @@ export class WindowInternal implements Window { taskpool.execute((): WindowProperties => { let res = this.getProperties(this.nativeObj) as WindowPropertiesInternal; res.type = res.typeInternal as WindowType; + res.displayId = windowProperties.displayIdInternal; return res; }).then((ret: NullishType) => { resolve(ret as WindowProperties); -- Gitee From 05944a71fc37bb3fe5581ed959228fb5e0e7bbe8 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 19:35:26 +0800 Subject: [PATCH 066/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 5b6d94f9f8..4f50c02344 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2362,6 +2362,8 @@ export class WindowInternal implements Window { public getProperties(callback: AsyncCallback): void { taskpool.execute((): WindowProperties => { let res = this.getProperties(this.nativeObj); + res.type = res.typeInternal as WindowType; + res.displayId = windowProperties.displayIdInternal; return res; }).then((ret: NullishType) => { callback(new BusinessError(), ret as WindowProperties); -- Gitee From 5b9985f5041e22c29ecdddbea252b9333865a219 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 20:05:22 +0800 Subject: [PATCH 067/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 4f50c02344..84d253e184 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2361,7 +2361,7 @@ export class WindowInternal implements Window { public getProperties(callback: AsyncCallback): void { taskpool.execute((): WindowProperties => { - let res = this.getProperties(this.nativeObj); + let res = this.getProperties(this.nativeObj) as WindowPropertiesInternal; res.type = res.typeInternal as WindowType; res.displayId = windowProperties.displayIdInternal; return res; -- Gitee From c8eb403794fddf1644052e1d578774b10a92e52f Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 20:52:10 +0800 Subject: [PATCH 068/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 84d253e184..501e43a571 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2363,7 +2363,7 @@ export class WindowInternal implements Window { taskpool.execute((): WindowProperties => { let res = this.getProperties(this.nativeObj) as WindowPropertiesInternal; res.type = res.typeInternal as WindowType; - res.displayId = windowProperties.displayIdInternal; + res.displayId = res.displayIdInternal; return res; }).then((ret: NullishType) => { callback(new BusinessError(), ret as WindowProperties); -- Gitee From 5ef687db216540896c1c216d638e663396643a7f Mon Sep 17 00:00:00 2001 From: wangzilin Date: Tue, 5 Aug 2025 21:26:39 +0800 Subject: [PATCH 069/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 501e43a571..6f366517e5 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -2349,7 +2349,7 @@ export class WindowInternal implements Window { taskpool.execute((): WindowProperties => { let res = this.getProperties(this.nativeObj) as WindowPropertiesInternal; res.type = res.typeInternal as WindowType; - res.displayId = windowProperties.displayIdInternal; + res.displayId = res.displayIdInternal; return res; }).then((ret: NullishType) => { resolve(ret as WindowProperties); -- Gitee From c92b48feba281f0e1e13b993b8a18148a652057f Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 5 Aug 2025 17:48:47 +0800 Subject: [PATCH 070/109] DMS ANI stage2 makemirror bug fix Signed-off-by: chenpeng --- .../screen_ani/src/screen_ani_manager.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 99c660ed19..0642831514 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -222,12 +222,21 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani env->Object_GetPropertyByName_Double(mirrorScreen, "length", &length); TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); for (uint32_t i = 0; i < length; i++) { - ani_double screenId; - if (ANI_OK != env->Object_CallMethodByName_Double(mirrorScreen, "$_get", "I:D", &screenId, (ani_double)i)) { - TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); + ani_ref screenIdRef; + auto ret = env->Object_CallMethodByName_Ref(mirrorScreen, "$_get", "I:Lstd/core/Object;", + &screenIdRef, (ani_int)i); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail, ret: %{public}u", (ani_int)i, ret); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to get screenId"); return static_cast(INVALID_SCREEN_ID); } + ani_double screenId; + ret = env->Object_CallMethodByName_Double(static_cast(screenIdRef), "unboxed", ":D", &screenId); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DMS, "[ANI] unboxed screenId failed, ret: %{public}u", ret); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to unboxed screenId"); + return static_cast(INVALID_SCREEN_ID); + } screenIds.emplace_back(static_cast(screenId)); } ScreenId screenGroupId = INVALID_SCREEN_ID; -- Gitee From 373fba634bac47ef1c69dcad031718ed26059a30 Mon Sep 17 00:00:00 2001 From: mmorozov Date: Wed, 2 Jul 2025 13:16:32 +0300 Subject: [PATCH 071/109] Fix ani signatures Issue: https://gitee.com/openharmony/window_window_manager/issues/ICJJH5?from=project-issue Change-Id: I90797f7ed262aff422b2f57b5aed220296715316 Signed-off-by: mmorozov Signed-off-by: Rokashevich Svetlana --- .../display_ani/src/ani_err_utils.cpp | 12 +- .../display_ani/src/display_ani.cpp | 26 ++-- .../display_ani/src/display_ani_listener.cpp | 20 +-- .../display_ani/src/display_ani_manager.cpp | 8 +- .../display_ani/src/display_ani_utils.cpp | 6 +- .../src/ani_embeddable_window_stage.cpp | 6 +- .../ani_embeddable_window_stage_module.cpp | 2 +- .../src/ani_extension_window.cpp | 28 ++-- .../src/ani_extension_window_listener.cpp | 4 +- .../screen_ani/src/ani_err_utils.cpp | 6 +- .../screen_ani/src/screen_ani_listener.cpp | 14 +- .../screen_ani/src/screen_ani_manager.cpp | 14 +- .../screen_ani/src/screen_ani_utils.cpp | 6 +- .../screenshot_ani/src/ani_err_utils.cpp | 4 +- .../src/screenshot_ani_manager.cpp | 2 +- .../window_stage_ani/src/ani_err_utils.cpp | 4 +- .../window_stage_ani/src/ani_window.cpp | 134 +++++++++--------- .../src/ani_window_listener.cpp | 42 +++--- .../src/ani_window_manager.cpp | 20 +-- .../window_stage_ani/src/ani_window_stage.cpp | 6 +- .../src/ani_window_stage_module.cpp | 18 +-- .../window_stage_ani/src/ani_window_utils.cpp | 26 ++-- .../src/ani_err_utils.cpp | 6 +- .../src/ani_scene_session_manager.cpp | 8 +- 24 files changed, 211 insertions(+), 211 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp index db16a55bca..88f4f88e5a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/ani_err_utils.cpp @@ -98,10 +98,10 @@ ani_object AniErrUtils::CreateAniError(ani_env* env, const DMError& errorCode, s env->String_NewUTF8(msg.c_str(), msg.size(), &aniMsg); ani_object aniError = nullptr; ani_class cls; - if (ANI_OK != env->FindClass("Lescompat/Error", &cls)) { + if (ANI_OK != env->FindClass("escompat.Error", &cls)) { TLOGE(WmsLogTag::DMS, "[ANI] null class FoldCreaseRegionImpl"); } - DisplayAniUtils::NewAniObject(env, cls, "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniError, aniMsg); + DisplayAniUtils::NewAniObject(env, cls, "C{std.core.String}C{escompat.ErrorOptions}:", &aniError, aniMsg); return aniError; } @@ -112,10 +112,10 @@ ani_object AniErrUtils::CreateAniError(ani_env* env, const DmErrorCode& errorCod env->String_NewUTF8(msg.c_str(), msg.size(), &aniMsg); ani_object aniError = nullptr; ani_class cls; - if (ANI_OK != env->FindClass("Lescompat/Error", &cls)) { + if (ANI_OK != env->FindClass("escompat.Error", &cls)) { TLOGE(WmsLogTag::DMS, "[ANI] null class FoldCreaseRegionImpl"); } - DisplayAniUtils::NewAniObject(env, cls, "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniError, aniMsg); + DisplayAniUtils::NewAniObject(env, cls, "C{std.core.String}C{escompat.ErrorOptions}:", &aniError, aniMsg); return aniError; } @@ -147,13 +147,13 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DMS, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); + ani_status status = env->FindClass("@ohos.base.BusinessError", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "C{std.core.String}C{escompat.ErrorOptions}:", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 49590eb063..9d554f6edd 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -57,7 +57,7 @@ void DisplayAni::GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutIn for (int i = 0; i < std::min(int(length), static_cast(rects.size())); i++) { ani_ref currentCutoutInfo; if (ANI_OK != env->Object_CallMethodByName_Ref(static_cast(boundingRects), "$_get", - "I:Lstd/core/Object;", ¤tCutoutInfo, (ani_int)i)) { + "i:C{std.core.Object}", ¤tCutoutInfo, (ani_int)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); @@ -320,23 +320,23 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } ani_namespace nsp; - if ((ret = env->FindNamespace("L@ohos/display/display;", &nsp)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.display.display", &nsp)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } DisplayManagerAni::InitDisplayManagerAni(nsp, env); std::array funcs = { - ani_native_function {"isFoldable", ":Z", reinterpret_cast(DisplayManagerAni::IsFoldableAni)}, - ani_native_function {"getFoldDisplayModeNative", ":I", + ani_native_function {"isFoldable", ":z", reinterpret_cast(DisplayManagerAni::IsFoldableAni)}, + ani_native_function {"getFoldDisplayModeNative", ":i", reinterpret_cast(DisplayManagerAni::GetFoldDisplayModeAni)}, - ani_native_function {"getFoldStatusNative", ":I", reinterpret_cast(DisplayManagerAni::GetFoldStatus)}, - ani_native_function {"getCurrentFoldCreaseRegionNative", "Lstd/core/Object;J:V", + ani_native_function {"getFoldStatusNative", ":i", reinterpret_cast(DisplayManagerAni::GetFoldStatus)}, + ani_native_function {"getCurrentFoldCreaseRegionNative", "C{std.core.Object}l:", reinterpret_cast(DisplayManagerAni::GetCurrentFoldCreaseRegion)}, - ani_native_function {"getDisplayByIdSyncNative", "Lstd/core/Object;D:V", + ani_native_function {"getDisplayByIdSyncNative", "C{std.core.Object}d:", reinterpret_cast(DisplayManagerAni::GetDisplayByIdSyncAni)}, - ani_native_function {"getDefaultDisplaySyncNative", "Lstd/core/Object;:V", + ani_native_function {"getDefaultDisplaySyncNative", "C{std.core.Object}:", reinterpret_cast(DisplayManagerAni::GetDefaultDisplaySyncAni)}, - ani_native_function {"getAllDisplaysSyncNative", "Lescompat/Array;:V", + ani_native_function {"getAllDisplaysSyncNative", "C{escompat.Array}:", reinterpret_cast(DisplayManagerAni::GetAllDisplaysAni)}, ani_native_function {"syncOn", nullptr, reinterpret_cast(DisplayManagerAni::RegisterCallback)}, @@ -354,16 +354,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } ani_class displayCls = nullptr; - if ((ret = env->FindClass("L@ohos/display/display/DisplayImpl;", &displayCls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.display.display.DisplayImpl", &displayCls)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } std::array methods = { - ani_native_function {"getCutoutInfoInternal", "L@ohos/display/display/CutoutInfo;:V", + ani_native_function {"getCutoutInfoInternal", "C{@ohos.display.display.CutoutInfo}:", reinterpret_cast(DisplayAni::GetCutoutInfo)}, - ani_native_function {"getAvailableAreaInternal", "L@ohos/display/display/Rect;:V", + ani_native_function {"getAvailableAreaInternal", "C{@ohos.display.display.Rect}:", reinterpret_cast(DisplayAni::GetAvailableArea)}, - ani_native_function {"hasImmersiveWindowInternal", ":Z", + ani_native_function {"hasImmersiveWindowInternal", ":z", reinterpret_cast(DisplayAni::HasImmersiveWindow)}, ani_native_function {"syncOn", nullptr, reinterpret_cast(DisplayAni::RegisterCallback)}, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index fc793a0c11..fab8a8356b 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -115,7 +115,7 @@ void DisplayAniListener::OnCreate(DisplayId id) continue; } auto task = [env = env_, oneAniCallback, id] { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { @@ -160,7 +160,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) continue; } auto task = [env = env_, oneAniCallback, id] { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { @@ -202,7 +202,7 @@ void DisplayAniListener::OnChange(DisplayId id) continue; } auto task = [env = env_, oneAniCallback, id] { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "displayEventCallBack", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "displayEventCallBack", nullptr, oneAniCallback, static_cast(id)); }; if (!eventHandler_) { @@ -239,7 +239,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) auto it = aniCallback_.find(EVENT_PRIVATE_MODE_CHANGE); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, hasPrivate] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "captureStatusChangedCallback", nullptr, oneAniCallback, hasPrivate); }; if (!eventHandler_) { @@ -275,7 +275,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) auto it = aniCallback_.find(EVENT_FOLD_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldStatus] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldStatusCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "foldStatusCallback", nullptr, oneAniCallback, static_cast(foldStatus)); }; if (!eventHandler_) { @@ -309,7 +309,7 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) DisplayAniUtils::CreateAniArrayDouble(env_, foldAngles.size(), &cbArray, foldAngles); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, cbArray] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldAngleChangeCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "foldAngleChangeCallback", nullptr, oneAniCallback, cbArray); }; if (!eventHandler_) { @@ -344,7 +344,7 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) auto it = aniCallback_.find(EVENT_CAPTURE_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, isCapture] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "captureStatusChangedCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "captureStatusChangedCallback", nullptr, oneAniCallback, isCapture); }; if (!eventHandler_) { @@ -380,7 +380,7 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) auto it = aniCallback_.find(EVENT_DISPLAY_MODE_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldDisplayMode] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "foldDisplayModeCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "foldDisplayModeCallback", nullptr, oneAniCallback, static_cast(foldDisplayMode)); }; if (!eventHandler_) { @@ -417,7 +417,7 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) ani_object rectObj = nullptr; DisplayAniUtils::ConvertRect(area, rectObj, env_); auto task = [env = env_, oneAniCallback, rectObj] () { - DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "availableAreaChangedCallback", + DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "availableAreaChangedCallback", nullptr, oneAniCallback, rectObj); }; if (!eventHandler_) { @@ -452,4 +452,4 @@ ani_status DisplayAniListener::CallAniMethodVoid(ani_object object, const char* return ret; } } -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index e4d5ea360a..7272b6af27 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -40,7 +40,7 @@ ani_status DisplayManagerAni::InitDisplayManagerAni(ani_namespace displayNameSpa { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_function setObjFunc = nullptr; - ani_status ret = env->Namespace_FindFunction(displayNameSpace, "setDisplayMgrRef", "J:V", &setObjFunc); + ani_status ret = env->Namespace_FindFunction(displayNameSpace, "setDisplayMgrRef", "l:", &setObjFunc); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find setNativeObj func fail %{public}u", ret); return ret; @@ -121,7 +121,7 @@ void DisplayManagerAni::OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object ob for (int i = 0; i < std::min(int(length), static_cast(rects.size())); i++) { ani_ref currentCrease; if (ANI_OK != env->Object_CallMethodByName_Ref(static_cast(creaseRectsObj), - "$_get", "I:Lstd/core/Object;", ¤tCrease, (ani_int)i)) { + "$_get", "i:C{std.core.Object}", ¤tCrease, (ani_int)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } TLOGI(WmsLogTag::DMS, "current i: %{public}d", i); @@ -143,7 +143,7 @@ void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) for (int i = 0; i < std::min(int(length), static_cast(displays.size())); i++) { ani_ref currentDisplay; - if (ANI_OK != env->Object_CallMethodByName_Ref(arrayObj, "$_get", "I:Lstd/core/Object;", + if (ANI_OK != env->Object_CallMethodByName_Ref(arrayObj, "$_get", "i:C{std.core.Object}", ¤tDisplay, (ani_int)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); } @@ -461,4 +461,4 @@ void DisplayManagerAni::OnGetAllDisplayPhysicalResolution(ani_env* env, ani_obje } } } -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 7feeb5647c..0f8990e83b 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -86,7 +86,7 @@ void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vector(arrayObjLen); i++) { ani_ref obj; - env->Object_CallMethodByName_Ref(arrayObj, "$_get", "I:Lstd/core/Object;", &obj, (ani_int)i); + env->Object_CallMethodByName_Ref(arrayObj, "$_get", "i:C{std.core.Object}", &obj, (ani_int)i); env->Object_SetFieldByName_Int(static_cast(obj), "foldDisplayMode_", static_cast(displayPhysicalArray[i].foldDisplayMode_)); env->Object_SetFieldByName_Double(static_cast(obj), "physicalWidth", @@ -204,7 +204,7 @@ ani_status DisplayAniUtils::NewAniObject(ani_env* env, ani_class cls, const char ani_status DisplayAniUtils::NewAniObjectNoParams(ani_env* env, ani_class cls, ani_object* object) { ani_method aniCtor; - auto ret = env->Class_FindMethod(cls, "", ":V", &aniCtor); + auto ret = env->Class_FindMethod(cls, "", ":", &aniCtor); if (ret != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] find ctor method fail"); return ret; @@ -256,4 +256,4 @@ ani_status DisplayAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, } } -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp index 471c47a921..31e50fcb78 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage.cpp @@ -62,7 +62,7 @@ ani_object CreateAniEmbeddableWindowStage(ani_env* env, sptr wind ani_status ret; ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowStageInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); return cls; } @@ -77,7 +77,7 @@ ani_object CreateAniEmbeddableWindowStage(ani_env* env, sptr wind } ani_method initFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "", ":", &initFunc)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -87,7 +87,7 @@ ani_object CreateAniEmbeddableWindowStage(ani_env* env, sptr wind return nullptr; } ani_method setObjFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "setNativeObj", "l:", &setObjFunc)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp index 31235fe1d3..9ec6914858 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_embeddable_window_stage_module.cpp @@ -30,7 +30,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStage;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowStage", &cls)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window.cpp index 795c46bf37..49f0e25abc 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window.cpp @@ -49,7 +49,7 @@ ani_object AniExtensionWindow::CreateAniExtensionWindow(ani_env* env, sptrFindClass("L@ohos/uiExtensionHost/uiExtensionHost/UIExtensionHostInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.uiExtensionHost.uiExtensionHost.UIExtensionHostInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); return cls; } @@ -65,7 +65,7 @@ ani_object AniExtensionWindow::CreateAniExtensionWindow(ani_env* env, sptrClass_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "", ":", &initFunc)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -75,7 +75,7 @@ ani_object AniExtensionWindow::CreateAniExtensionWindow(ani_env* env, sptrClass_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "setNativeObj", "l:", &setObjFunc)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -318,21 +318,21 @@ ani_object createExtentionWindow(ani_env* env, ani_long win, ani_int hostId) extern "C" { using namespace OHOS::Rosen; std::array extensionWindowNativeMethods = { - ani_native_function {"getProperties", "JLstd/core/Object;:I", reinterpret_cast(ExtWindowGetProperties)}, - ani_native_function {"setProperties", "JLstd/core/Object;:I", reinterpret_cast(ExtWindowSetProperties)}, - ani_native_function {"getWindowAvoidArea", "JILstd/core/Object;:I", + ani_native_function {"getProperties", "lC{std.core.Object}:i", reinterpret_cast(ExtWindowGetProperties)}, + ani_native_function {"setProperties", "lC{std.core.Object}:i", reinterpret_cast(ExtWindowSetProperties)}, + ani_native_function {"getWindowAvoidArea", "liC{std.core.Object}:i", reinterpret_cast(ExtWindowGetWindowAvoidArea)}, - ani_native_function {"setWaterMarkFlag", "JZ:V", + ani_native_function {"setWaterMarkFlag", "lz:", reinterpret_cast(ExtWindowSetWaterMarkFlag)}, - ani_native_function {"hidePrivacyContentForHost", "JZ:V", + ani_native_function {"hidePrivacyContentForHost", "lz:", reinterpret_cast(ExtWindowHidePrivacyContentForHost)}, - ani_native_function {"onAvoidAreaChange", "JLstd/core/Object;Lstd/core/Object;:I", + ani_native_function {"onAvoidAreaChange", "lC{std.core.Object}C{std.core.Object}:i", reinterpret_cast(ExtWindowOnAvoidAreaChange)}, - ani_native_function {"onWindowSizeChange", "JLstd/core/Object;Lstd/core/Object;:I", + ani_native_function {"onWindowSizeChange", "lC{std.core.Object}C{std.core.Object}:i", reinterpret_cast(ExtWindowOnWindowSizeChange)}, - ani_native_function {"offAvoidAreaChange", "JLstd/core/Object;:I", + ani_native_function {"offAvoidAreaChange", "lC{std.core.Object}:i", reinterpret_cast(ExtWindowOffAvoidAreaChange)}, - ani_native_function {"offWindowSizeChange", "JLstd/core/Object;:I", + ani_native_function {"offWindowSizeChange", "lC{std.core.Object}:i", reinterpret_cast(ExtWindowOffWindowSizeChange)}, }; ANI_EXPORT ani_status ExtensionWindow_ANI_Constructor(ani_vm *vm, uint32_t *result) @@ -347,7 +347,7 @@ ANI_EXPORT ani_status ExtensionWindow_ANI_Constructor(ani_vm *vm, uint32_t *resu } ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/uiExtensionHost/uiExtensionHost/UIExtensionHostInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.uiExtensionHost.uiExtensionHost.UIExtensionHostInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } @@ -361,7 +361,7 @@ ANI_EXPORT ani_status ExtensionWindow_ANI_Constructor(ani_vm *vm, uint32_t *resu // test ani_namespace ns; - if ((ret = env->FindNamespace("L@ohos/uiExtensionHost/uiExtensionHost;", &ns)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.uiExtensionHost.uiExtensionHost", &ns)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI] find ns %{public}u", ret); return ANI_NOT_FOUND; } diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp index f18a63d88f..644960ed49 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_listener.cpp @@ -62,11 +62,11 @@ void AniExtensionWindowListener::Callback() ani_status ret {}; ani_function fn {}; ani_namespace ns {}; - if ((ret = env_->FindNamespace("L@ohos/uiExtensionHost/uiExtensionHost;", &ns)) != ANI_OK) { + if ((ret = env_->FindNamespace("@ohos.uiExtensionHost.uiExtensionHost", &ns)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]canot find ns %{public}d", ret); return; } - if ((ret = env_->Namespace_FindFunction(ns, "callback", "Lstd/core/Object;Lstd/core/Object;:V", &fn)) != ANI_OK) { + if ((ret = env_->Namespace_FindFunction(ns, "callback", "C{std.core.Object}C{std.core.Object}:", &fn)) != ANI_OK) { TLOGE(WmsLogTag::WMS_UIEXT, "[ANI]cannot find callback %{public}d", ret); return; } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp index 0f9c197337..b73569d949 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/ani_err_utils.cpp @@ -118,13 +118,13 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DMS, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); + ani_status status = env->FindClass("@ohos.base.BusinessError", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "C{std.core.String}C{escompat.ErrorOptions}:", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; @@ -143,4 +143,4 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st } return ANI_OK; } -} // namespace OHOS::Rosen \ No newline at end of file +} // namespace OHOS::Rosen diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index b03fe40c11..2c5aaa60f4 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -106,8 +106,8 @@ void ScreenAniListener::OnConnect(ScreenId id) } auto task = [env = env_, oneAniCallback, id] { - ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", + "C{std.core.Object}d:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); @@ -153,8 +153,8 @@ void ScreenAniListener::OnDisconnect(ScreenId id) } auto task = [env = env_, oneAniCallback, id] { - ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", + "C{std.core.Object}d:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); @@ -198,8 +198,8 @@ void ScreenAniListener::OnChange(ScreenId id) continue; } auto task = [env = env_, oneAniCallback, id] () { - ScreenAniUtils::CallAniFunctionVoid(env, "L@ohos/screen/screen;", "screenEventCallBack", - "Lstd/core/Object;D:V", oneAniCallback, static_cast(id)); + ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", + "C{std.core.Object}d:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "get main event handler failed!"); @@ -230,4 +230,4 @@ ani_status ScreenAniListener::CallAniMethodVoid(ani_object object, const char* c return ret; } } -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 0642831514..9b8254b0b4 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -223,7 +223,7 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); for (uint32_t i = 0; i < length; i++) { ani_ref screenIdRef; - auto ret = env->Object_CallMethodByName_Ref(mirrorScreen, "$_get", "I:Lstd/core/Object;", + auto ret = env->Object_CallMethodByName_Ref(mirrorScreen, "$_get", "i:C{std.core.Object}", &screenIdRef, (ani_int)i); if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail, ret: %{public}u", (ani_int)i, ret); @@ -231,7 +231,7 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani return static_cast(INVALID_SCREEN_ID); } ani_double screenId; - ret = env->Object_CallMethodByName_Double(static_cast(screenIdRef), "unboxed", ":D", &screenId); + ret = env->Object_CallMethodByName_Double(static_cast(screenIdRef), "unboxed", ":d", &screenId); if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] unboxed screenId failed, ret: %{public}u", ret); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to unboxed screenId"); @@ -254,7 +254,7 @@ ani_status ScreenManagerAni::InitScreenManagerAni(ani_namespace screenNameSpace, { TLOGI(WmsLogTag::DEFAULT, "[ANI] begin"); ani_function setObjFunc = nullptr; - ani_status ret = env->Namespace_FindFunction(screenNameSpace, "setScreenMgrRef", "J:V", &setObjFunc); + ani_status ret = env->Namespace_FindFunction(screenNameSpace, "setScreenMgrRef", "l:", &setObjFunc); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find setNativeObj func fail %{public}u", ret); return ret; @@ -302,7 +302,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } ani_namespace nsp; - if ((ret = env->FindNamespace("L@ohos/screen/screen;", &nsp)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.screen.screen", &nsp)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } @@ -322,12 +322,12 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } ani_class screenCls = nullptr; - if ((ret = env->FindClass("L@ohos/screen/screen/ScreenImpl;", &screenCls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.screen.screen.ScreenImpl", &screenCls)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } std::array methods = { - ani_native_function {"setDensityDpiInternal", "D:V", + ani_native_function {"setDensityDpiInternal", "d:", reinterpret_cast(ScreenAni::SetDensityDpi)}, }; if ((ret = env->Class_BindNativeMethods(screenCls, methods.data(), methods.size())) != ANI_OK) { @@ -340,4 +340,4 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } } -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index d3c26f9da0..1464ade863 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -76,11 +76,11 @@ ani_status ScreenAniUtils::ConvertScreen(ani_env *env, sptr screen, ani_ return ANI_ERROR; } std::vector> modes = info->GetModes(); - ani_array_ref screenModeInfos = NewNativeArray(env, "L@ohos/screen/screen/ScreenModeInfoImpl;", + ani_array_ref screenModeInfos = NewNativeArray(env, "@ohos.screen.screen.ScreenModeInfoImpl", static_cast(modes.size())); ani_size index = 0; for (auto mode : modes) { - ani_object screenModeInfo = NewNativeObject(env, "L@ohos/screen/screen/ScreenModeInfoImpl;"); + ani_object screenModeInfo = NewNativeObject(env, "@ohos.screen.screen.ScreenModeInfoImpl"); ConvertScreenMode(env, mode, screenModeInfo); if (ANI_OK != env->Array_Set_Ref(screenModeInfos, index, screenModeInfo)) { TLOGE(WmsLogTag::DMS, "[ANI] Array_Set_Ref fail"); @@ -142,7 +142,7 @@ ani_status ScreenAniUtils::ConvertScreens(ani_env *env, std::vector TLOGI(WmsLogTag::DMS, "[ANI] screens size %{public}u", static_cast(screens.size())); for (uint32_t i = 0; i < screens.size(); i++) { ani_ref currentScreenAni; - if (ANI_OK != env->Object_CallMethodByName_Ref(screensAni, "$_get", "I:Lstd/core/Object;", + if (ANI_OK != env->Object_CallMethodByName_Ref(screensAni, "$_get", "i:C{std.core.Object}", ¤tScreenAni, (ani_int)i)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail", (ani_int)i); return ANI_ERROR; diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp index 9699f2d6fa..ac86c8dbe5 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/ani_err_utils.cpp @@ -118,13 +118,13 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DMS, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); + ani_status status = env->FindClass("@ohos.base.BusinessError", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "C{std.core.String}C{escompat.ErrorOptions}:", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp index 265c2d587a..0a8486b56e 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp @@ -127,7 +127,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } ani_namespace nsp; - if ((ret = env->FindNamespace("L@ohos/screenshot/screenshot;", &nsp)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.screenshot.screenshot", &nsp)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp index cc99f83c70..945f76da8d 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_err_utils.cpp @@ -216,13 +216,13 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DEFAULT, "[ANI] in"); ani_class aniClass; - ani_status status = env->FindClass("L@ohos/base/BusinessError;", &aniClass); + ani_status status = env->FindClass("@ohos.base.BusinessError", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "C{std.core.String}C{escompat.ErrorOptions}:", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index f25c9bad0d..5dc8065037 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -54,7 +54,7 @@ AniWindow* AniWindow::GetWindowObjectFromEnv(ani_env* env, ani_object obj) { ani_class cls = nullptr; ani_status ret; - if ((ret = env->FindClass("L@ohos/window/window/Window;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.Window", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI]null env %{public}u", ret); return nullptr; } @@ -931,7 +931,7 @@ __attribute__((no_sanitize("cfi"))) ani_status ret; ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] null env %{public}u", ret); return nullptr; } @@ -939,7 +939,7 @@ __attribute__((no_sanitize("cfi"))) TLOGD(WmsLogTag::DEFAULT, "[ANI] native obj %{public}p", aniWindow.get()); ani_method initFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "", ":", &initFunc)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -949,7 +949,7 @@ __attribute__((no_sanitize("cfi"))) return nullptr; } ani_method setObjFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "setNativeObj", "l:", &setObjFunc)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] get setNativeObj fail %{public}u", ret); return nullptr; } @@ -2556,7 +2556,7 @@ __attribute__((no_sanitize("cfi"))) ani_status ret; ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] null env %{public}u", ret); return cls; } @@ -2571,7 +2571,7 @@ __attribute__((no_sanitize("cfi"))) } ani_method initFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "", ":", &initFunc)) != ANI_OK) { TLOGD(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -2581,7 +2581,7 @@ __attribute__((no_sanitize("cfi"))) return nullptr; } ani_method setObjFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "setNativeObj", "l:", &setObjFunc)) != ANI_OK) { TLOGD(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -2620,125 +2620,125 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) } ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowInternal", &cls)) != ANI_OK) { TLOGD(WmsLogTag::DEFAULT, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } std::array methods = { - ani_native_function {"setFollowParentWindowLayoutEnabled", "JZ:V", + ani_native_function {"setFollowParentWindowLayoutEnabled", "lz:", reinterpret_cast(SetFollowParentWindowLayoutEnabled)}, - ani_native_function {"setWindowDelayRaiseOnDrag", "JZ:V", + ani_native_function {"setWindowDelayRaiseOnDrag", "lz:", reinterpret_cast(SetWindowDelayRaiseOnDrag)}, - ani_native_function {"getParentWindow", "J:L@ohos/window/window/Window;", + ani_native_function {"getParentWindow", "l:C{@ohos.window.window.Window}", reinterpret_cast(GetParentWindow)}, - ani_native_function {"getWindowDecorVisible", "J:Z", + ani_native_function {"getWindowDecorVisible", "l:z", reinterpret_cast(GetWindowDecorVisible)}, - ani_native_function {"stopMoving", "J:V", + ani_native_function {"stopMoving", "l:", reinterpret_cast(StopMoving)}, - ani_native_function {"setParentWindow", "JD:V", + ani_native_function {"setParentWindow", "ld:", reinterpret_cast(SetParentWindow)}, - ani_native_function {"setWindowTitle", "JLstd/core/String;:V", + ani_native_function {"setWindowTitle", "lC{std.core.String}:", reinterpret_cast(SetWindowTitle)}, - ani_native_function {"getDecorButtonStyle", "J:L@ohos/window/window/DecorButtonStyle;", + ani_native_function {"getDecorButtonStyle", "l:C{@ohos.window.window.DecorButtonStyle}", reinterpret_cast(GetDecorButtonStyle)}, - ani_native_function {"getTitleButtonRect", "J:L@ohos/window/window/TitleButtonRect;", + ani_native_function {"getTitleButtonRect", "l:C{@ohos.window.window.TitleButtonRect}", reinterpret_cast(GetTitleButtonRect)}, - ani_native_function {"setTitleButtonVisible", "JL@ohos/window/window/TitleButtonVisibleParam;:V", + ani_native_function {"setTitleButtonVisible", "lC{@ohos.window.window.TitleButtonVisibleParam}:", reinterpret_cast(SetTitleButtonVisible)}, - ani_native_function {"setWindowTitleMoveEnabled", "JZ:V", + ani_native_function {"setWindowTitleMoveEnabled", "lz:", reinterpret_cast(SetWindowTitleMoveEnabled)}, - ani_native_function {"setWindowTopmost", "JZ:V", + ani_native_function {"setWindowTopmost", "lz:", reinterpret_cast(SetWindowTopmost)}, - ani_native_function {"setTitleAndDockHoverShown", "JZZ:V", + ani_native_function {"setTitleAndDockHoverShown", "lzz:", reinterpret_cast(SetTitleAndDockHoverShown)}, - ani_native_function {"restore", "J:V", + ani_native_function {"restore", "l:", reinterpret_cast(Restore)}, - ani_native_function {"startMoving", "J:V", + ani_native_function {"startMoving", "l:", reinterpret_cast(StartMoving)}, - ani_native_function {"startMoveWindowWithCoordinate", "JII:V", + ani_native_function {"startMoveWindowWithCoordinate", "lii:", reinterpret_cast(StartMoveWindowWithCoordinate)}, - ani_native_function {"setWindowTitleButtonVisible", "JL@ohos/window/window/WindowTitleButtonVisibleParam;:V", + ani_native_function {"setWindowTitleButtonVisible", "lC{@ohos.window.window.WindowTitleButtonVisibleParam}:", reinterpret_cast(SetWindowTitleButtonVisible)}, - ani_native_function {"setDecorButtonStyle", "JL@ohos/window/window/DecorButtonStyle;:V", + ani_native_function {"setDecorButtonStyle", "lC{@ohos.window.window.DecorButtonStyle}:", reinterpret_cast(SetDecorButtonStyle)}, - ani_native_function {"getWindowStatus", "J:I", + ani_native_function {"getWindowStatus", "l:i", reinterpret_cast(GetWindowStatus)}, - ani_native_function {"minimize", "J:V", + ani_native_function {"minimize", "l:", reinterpret_cast(Minimize)}, - ani_native_function {"maximize", "JI:V", + ani_native_function {"maximize", "li:", reinterpret_cast(Maximize)}, - ani_native_function {"resize", "JII:V", + ani_native_function {"resize", "lii:", reinterpret_cast(WindowResize)}, - ani_native_function {"moveWindowTo", "JII:V", + ani_native_function {"moveWindowTo", "lii:", reinterpret_cast(WindowMoveWindowTo)}, - ani_native_function {"getGlobalRect", "J:L@ohos/window/window/Rect;", + ani_native_function {"getGlobalRect", "l:C{@ohos.window.window.Rect}", reinterpret_cast(WindowGetGlobalRect)}, - ani_native_function {"getWindowDecorHeight", "J:I", + ani_native_function {"getWindowDecorHeight", "l:i", reinterpret_cast(WindowGetWindowDecorHeight)}, - ani_native_function {"setWindowBackgroundColor", "JLstd/core/String;:I", + ani_native_function {"setWindowBackgroundColor", "lC{std.core.String}:i", reinterpret_cast(WindowSetWindowBackgroundColor)}, - ani_native_function {"setImmersiveModeEnabledState", "JZ:I", + ani_native_function {"setImmersiveModeEnabledState", "lz:i", reinterpret_cast(WindowSetImmersiveModeEnabledState)}, - ani_native_function {"setWindowDecorVisible", "JZ:I", + ani_native_function {"setWindowDecorVisible", "lz:i", reinterpret_cast(WindowSetWindowDecorVisible)}, - ani_native_function {"setWindowDecorHeight", "JI:I", + ani_native_function {"setWindowDecorHeight", "li:i", reinterpret_cast(WindowSetWindowDecorHeight)}, - ani_native_function {"getWindowProperties", "J:L@ohos/window/window/WindowProperties;", + ani_native_function {"getWindowProperties", "l:C{@ohos.window.window.WindowProperties}", reinterpret_cast(WindowGetWindowProperties)}, - ani_native_function {"getProperties", "J:L@ohos/window/window/WindowProperties;", + ani_native_function {"getProperties", "l:C{@ohos.window.window.WindowProperties}", reinterpret_cast(WindowGetWindowProperties)}, - ani_native_function {"isWindowSupportWideGamut", "J:Z", + ani_native_function {"isWindowSupportWideGamut", "l:z", reinterpret_cast(WindowIsWindowSupportWideGamut)}, - ani_native_function {"setWindowLayoutFullScreen", "JZ:I", + ani_native_function {"setWindowLayoutFullScreen", "lz:i", reinterpret_cast(WindowSetWindowLayoutFullScreen)}, - ani_native_function {"setWindowSystemBarProperties", "JL@ohos/window/window/SystemBarProperties;:I", + ani_native_function {"setWindowSystemBarProperties", "lC{@ohos.window.window.SystemBarProperties}:i", reinterpret_cast(WindowSetSystemBarProperties)}, - ani_native_function {"setSpecificSystemBarEnabled", "JLstd/core/String;ZZ:I", + ani_native_function {"setSpecificSystemBarEnabled", "lC{std.core.String}zz:i", reinterpret_cast(WindowSetSpecificSystemBarEnabled)}, - ani_native_function {"snapshot", "J:L@ohos/multimedia/image/image/PixelMap;", + ani_native_function {"snapshot", "l:C{@ohos.multimedia.image.image.PixelMap}", reinterpret_cast(Snapshot)}, - ani_native_function {"hideNonSystemFloatingWindows", "JZ:V", + ani_native_function {"hideNonSystemFloatingWindows", "lz:", reinterpret_cast(HideNonSystemFloatingWindows)}, - ani_native_function {"setWindowColorSpaceSync", "JI:V", + ani_native_function {"setWindowColorSpaceSync", "li:", reinterpret_cast(AniWindow::SetWindowColorSpace)}, - ani_native_function {"setPreferredOrientationSync", "JI:V", + ani_native_function {"setPreferredOrientationSync", "li:", reinterpret_cast(AniWindow::SetPreferredOrientation)}, - ani_native_function {"setWindowPrivacyModeSync", "JZ:V", + ani_native_function {"setWindowPrivacyModeSync", "lz:", reinterpret_cast(AniWindow::SetWindowPrivacyMode)}, - ani_native_function {"recoverSync", "J:V", + ani_native_function {"recoverSync", "l:", reinterpret_cast(AniWindow::Recover)}, - ani_native_function {"setUIContentSync", "JLstd/core/String;:V", + ani_native_function {"setUIContentSync", "lC{std.core.String}:", reinterpret_cast(AniWindow::SetUIContent)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + "lC{std.core.String}C{arkui.stateManagement.storage.localStorage.LocalStorage}:", reinterpret_cast(AniWindow::LoadContent)}, - ani_native_function {"setWindowKeepScreenOnSync", "JZ:V", + ani_native_function {"setWindowKeepScreenOnSync", "lz:", reinterpret_cast(AniWindow::SetWindowKeepScreenOn)}, - ani_native_function {"setWindowSystemBarEnableSync", "JLescompat/Array;:V", + ani_native_function {"setWindowSystemBarEnableSync", "lC{escompat.Array}:", reinterpret_cast(AniWindow::SetWindowSystemBarEnable)}, - ani_native_function {"getUIContextSync", "J:L@ohos/arkui/UIContext/UIContext;", + ani_native_function {"getUIContextSync", "l:C{@ohos.arkui.UIContext.UIContext}", reinterpret_cast(AniWindow::GetUIContext)}, - ani_native_function {"getWindowAvoidAreaSync", "JI:L@ohos/window/window/AvoidArea;", + ani_native_function {"getWindowAvoidAreaSync", "li:C{@ohos.window.window.AvoidArea}", reinterpret_cast(AniWindow::GetWindowAvoidArea)}, - ani_native_function {"setWaterMarkFlagSync", "JZ:V", + ani_native_function {"setWaterMarkFlagSync", "lz:", reinterpret_cast(AniWindow::SetWaterMarkFlag)}, - ani_native_function {"setWindowFocusableSync", "JZ:V", + ani_native_function {"setWindowFocusableSync", "lz:", reinterpret_cast(AniWindow::SetWindowFocusable)}, - ani_native_function {"keepKeyboardOnFocusSync", "JZ:V", + ani_native_function {"keepKeyboardOnFocusSync", "lz:", reinterpret_cast(AniWindow::KeepKeyboardOnFocus)}, - ani_native_function {"setWindowTouchableSync", "JZ:V", + ani_native_function {"setWindowTouchableSync", "lz:", reinterpret_cast(AniWindow::SetWindowTouchable)}, ani_native_function {"onNoInteractionDetected", nullptr, reinterpret_cast(AniWindow::RegisterNoInteractionDetectedCallback)}, - ani_native_function {"opacity", "JD:V", + ani_native_function {"opacity", "ld:", reinterpret_cast(AniWindow::Opacity)}, - ani_native_function {"scale", "JL@ohos/window/window/ScaleOptions;:V", + ani_native_function {"scale", "lC{@ohos.window.window.ScaleOptions}:", reinterpret_cast(AniWindow::Scale)}, - ani_native_function {"translate", "JL@ohos/window/window/TranslateOptions;:V", + ani_native_function {"translate", "lC{@ohos.window.window.TranslateOptions}:", reinterpret_cast(AniWindow::Translate)}, - ani_native_function {"rotate", "JL@ohos/window/window/RotateOptions;:V", + ani_native_function {"rotate", "lC{@ohos.window.window.RotateOptions}:", reinterpret_cast(AniWindow::Rotate)}, - ani_native_function {"setShadow", "JDLstd/core/String;Lstd/core/Double;Lstd/core/Double;:V", + ani_native_function {"setShadow", "ldC{std.core.String}C{std.core.Double}C{std.core.Double}:", reinterpret_cast(AniWindow::SetShadow)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindow::RegisterWindowCallback)}, @@ -2765,16 +2765,16 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) *result = ANI_VERSION_1; ani_namespace ns; - if ((ret = env->FindNamespace("L@ohos/window/window;", &ns)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.window.window", &ns)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find ns %{public}u", ret); return ANI_NOT_FOUND; } std::array functions = { - ani_native_function {"CreateWindow", "J:L@ohos/window/window/WindowInternal;", + ani_native_function {"CreateWindow", "l:C{@ohos.window.window.WindowInternal}", reinterpret_cast(WindowCreate)}, }; if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind ns window func %{public}u", ret); } return ANI_OK; -} \ No newline at end of file +} diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index 355956f371..a9e367f619 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -62,7 +62,7 @@ void AniWindowListener::OnSizeChange(Rect rect, WindowSizeChangeReason reason, TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowSizeCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowSizeCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSize(eng, rect.width_, rect.height_)); }; if (!eventHandler_) { @@ -86,7 +86,7 @@ void AniWindowListener::OnSystemBarPropertyChange(DisplayId displayId, const Sys TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemBarTintChangeCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runSystemBarTintChangeCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniSystemBarTintState(eng, displayId, tints)); }; if (!eventHandler_) { @@ -108,7 +108,7 @@ void AniWindowListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaT return; } auto nativeAvoidArea = AniWindowUtils::CreateAniAvoidArea(eng, avoidArea, type); - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runAvoidAreaChangeCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runAvoidAreaChangeCallback", nullptr, thisListener->aniCallback_, nativeAvoidArea, static_cast(type)); }; if (!eventHandler_) { @@ -128,7 +128,7 @@ void AniWindowListener::OnSystemDensityChanged(float density) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runSystemDensityChangeCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runSystemDensityChangeCallback", nullptr, thisListener->aniCallback_, static_cast(density)); }; if (!eventHandler_) { @@ -148,7 +148,7 @@ void AniWindowListener::OnDisplayIdChanged(DisplayId displayId) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runDisplayIdChangeCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runDisplayIdChangeCallback", nullptr, thisListener->aniCallback_, static_cast(displayId)); }; if (!eventHandler_) { @@ -168,7 +168,7 @@ void AniWindowListener::LifeCycleCallback(LifeCycleEventType eventType) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", caseType == CaseType::CASE_STAGE ? "runWindowStageEventCallback" : "runWindowEventCallback", nullptr, thisListener->aniCallback_, static_cast(eventType)); }; @@ -244,7 +244,7 @@ void AniWindowListener::OnSizeChange(const sptr& info, TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardHeightChangeCallback", + AniWindowUtils::CallAniFunctionVoid(env_, "@ohos.window.window", "runKeyboardHeightChangeCallback", nullptr, thisListener->aniCallback_, static_cast(info->rect_.height_)); } @@ -258,7 +258,7 @@ void AniWindowListener::OnKeyboardDidShow(const KeyboardPanelInfo& keyboardPanel TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidShowCallback", + AniWindowUtils::CallAniFunctionVoid(env_, "@ohos.window.window", "runKeyboardDidShowCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } @@ -272,7 +272,7 @@ void AniWindowListener::OnKeyboardDidHide(const KeyboardPanelInfo& keyboardPanel TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI]this listener, env_ or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(env_, "L@ohos/window/window;", "runKeyboardDidHideCallback", + AniWindowUtils::CallAniFunctionVoid(env_, "@ohos.window.window", "runKeyboardDidHideCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniKeyboardInfo(env_, keyboardPanelInfo)); } @@ -285,7 +285,7 @@ void AniWindowListener::OnTouchOutside() const TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowTouchOutCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowTouchOutCallback", nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { @@ -305,7 +305,7 @@ void AniWindowListener::OnScreenshot() TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerVoidArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerVoidArgCallback", nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { @@ -324,7 +324,7 @@ void AniWindowListener::OnDialogTargetTouch() const TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowDialogTargetCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowDialogTargetCallback", nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { @@ -348,7 +348,7 @@ void AniWindowListener::OnGestureNavigationEnabledUpdate(bool enable) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(enable)); }; if (!eventHandler_) { @@ -367,7 +367,7 @@ void AniWindowListener::OnWaterMarkFlagUpdate(bool showWaterMark) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(showWaterMark)); }; if (!eventHandler_) { @@ -396,7 +396,7 @@ void AniWindowListener::OnWindowNoInteractionCallback() TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowNoInteractionCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowNoInteractionCallback", nullptr, thisListener->aniCallback_); }; if (!eventHandler_) { @@ -416,7 +416,7 @@ void AniWindowListener::OnWindowStatusChange(WindowStatus windowstatus) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowStatusCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowStatusCallback", nullptr, thisListener->aniCallback_, static_cast(windowstatus)); }; if (!eventHandler_) { @@ -436,7 +436,7 @@ void AniWindowListener::OnWindowVisibilityChangedCallback(const bool isVisible) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(isVisible)); }; if (!eventHandler_) { @@ -455,7 +455,7 @@ void AniWindowListener::OnWindowHighlightChange(bool isHighlight) TLOGE(WmsLogTag::DEFAULT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(isHighlight)); }; if (!eventHandler_) { @@ -492,7 +492,7 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowRectCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowRectCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniRect(eng, rect), static_cast(reason)); }; @@ -519,7 +519,7 @@ void AniWindowListener::OnSubWindowClose(bool& terminateCloseProcess) TLOGE(WmsLogTag::WMS_SUB, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "L@ohos/window/window;", "runWindowListenerBooleanArgCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowListenerBooleanArgCallback", nullptr, thisListener->aniCallback_, ani_boolean(terminateCloseProcess)); }; if (!eventHandler_) { @@ -533,4 +533,4 @@ void AniWindowListener::OnMainWindowClose(bool& terminateCloseProcess) { } } // namespace Rosen -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 9749d3862e..937b94294b 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -49,24 +49,24 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_namespace ns; ani_status ret; - if ((ret = env->FindNamespace("L@ohos/window/window;", &ns)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.window.window", &ns)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find ns %{public}u", ret); return ANI_NOT_FOUND; } std::array functions = { - ani_native_function {"CreateWindowStage", "J:L@ohos/window/window/WindowStageInternal;", + ani_native_function {"CreateWindowStage", "l:C{@ohos.window.window.WindowStageInternal}", reinterpret_cast(AniWindowManager::WindowStageCreate)}, ani_native_function {"getWindowsByCoordinate", - "JL@ohos/window/window/GetWindowsByCoordinateParam;:Lescompat/Array;", + "lC{@ohos.window.window.GetWindowsByCoordinateParam}:C{escompat.Array}", reinterpret_cast(AniWindowManager::GetWindowsByCoordinate)}, ani_native_function {"getLastWindowSync", - "JLapplication/BaseContext/BaseContext;:L@ohos/window/window/Window;", + "lC{application.BaseContext.BaseContext}:C{@ohos.window.window.Window}", reinterpret_cast(AniWindowManager::GetLastWindow)}, ani_native_function {"findWindowSync", - "JLstd/core/String;:L@ohos/window/window/Window;", + "lC{std.core.String}:C{@ohos.window.window.Window}", reinterpret_cast(AniWindowManager::FindWindow)}, - ani_native_function {"minimizeAllSync", "JJ:V", reinterpret_cast(AniWindowManager::MinimizeAll)}, - ani_native_function {"shiftAppWindowFocusSync", "JII:V", + ani_native_function {"minimizeAllSync", "ll:", reinterpret_cast(AniWindowManager::MinimizeAll)}, + ani_native_function {"shiftAppWindowFocusSync", "lii:", reinterpret_cast(AniWindowManager::ShiftAppWindowFocus)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindowManager::RegisterWindowManagerCallback)}, @@ -74,7 +74,7 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) reinterpret_cast(AniWindowManager::UnregisterWindowManagerCallback)}, ani_native_function {"windowDestroyCallback", nullptr, reinterpret_cast(AniWindow::Finalizer)}, ani_native_function {"createWindowSync", - "JL@ohos/window/window/Configuration;:L@ohos/window/window/Window;", + "lC{@ohos.window.window.Configuration}:C{@ohos.window.window.Window}", reinterpret_cast(AniWindowManager::CreateWindow)}, }; if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { @@ -83,7 +83,7 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) } ani_function setObjFunc = nullptr; - ret = env->Namespace_FindFunction(ns, "setNativeObj", "J:V", &setObjFunc); + ret = env->Namespace_FindFunction(ns, "setNativeObj", "l:", &setObjFunc); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find setNativeObj func fail %{public}u", ret); return ret; @@ -449,4 +449,4 @@ void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowI return ; } } // namespace Rosen -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index b649a43365..093e311e82 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -191,7 +191,7 @@ __attribute__((no_sanitize("cfi"))) ani_status ret; ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowStageInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] null env %{public}u", ret); return cls; } @@ -200,7 +200,7 @@ __attribute__((no_sanitize("cfi"))) TLOGD(WmsLogTag::DEFAULT, "[ANI] native obj %{public}p", windowStage.get()); ani_method initFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "", ":V", &initFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "", ":", &initFunc)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] get ctor fail %{public}u", ret); return nullptr; } @@ -210,7 +210,7 @@ __attribute__((no_sanitize("cfi"))) return nullptr; } ani_method setObjFunc = nullptr; - if ((ret = env->Class_FindMethod(cls, "setNativeObj", "J:V", &setObjFunc)) != ANI_OK) { + if ((ret = env->Class_FindMethod(cls, "setNativeObj", "l:", &setObjFunc)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] call setNativeObj fail %{public}u", ret); return nullptr; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp index 5bda6cd43c..1aaf49acc3 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage_module.cpp @@ -95,35 +95,35 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_NOT_FOUND; } ani_class cls = nullptr; - if ((ret = env->FindClass("L@ohos/window/window/WindowStageInternal;", &cls)) != ANI_OK) { + if ((ret = env->FindClass("@ohos.window.window.WindowStageInternal", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] can't find class %{public}u", ret); return ANI_NOT_FOUND; } std::array methods = { - ani_native_function {"setWindowRectAutoSave", "JZZ:V", + ani_native_function {"setWindowRectAutoSave", "lzz:", reinterpret_cast(SetWindowRectAutoSave)}, - ani_native_function {"isWindowRectAutoSave", "J:Z", + ani_native_function {"isWindowRectAutoSave", "l:z", reinterpret_cast(IsWindowRectAutoSave)}, - ani_native_function {"removeStartingWindow", "J:V", + ani_native_function {"removeStartingWindow", "l:", reinterpret_cast(RemoveStartingWindow)}, ani_native_function {"loadContentSync", - "JLstd/core/String;Larkui/stateManagement/storage/localStorage/LocalStorage;:V", + "lC{std.core.String}C{arkui.stateManagement.storage.localStorage.LocalStorage}:", reinterpret_cast(AniWindowStage::LoadContent)}, ani_native_function {"disableWindowDecorSync", nullptr, reinterpret_cast(AniWindowStage::DisableWindowDecor)}, ani_native_function {"setShowOnLockScreenSync", nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, - ani_native_function {"getMainWindowSync", "J:L@ohos/window/window/Window;", + ani_native_function {"getMainWindowSync", "l:C{@ohos.window.window.Window}", reinterpret_cast(WindowGetMainWindow)}, - ani_native_function {"createSubWindowSync", "JLstd/core/String;:L@ohos/window/window/Window;", + ani_native_function {"createSubWindowSync", "lC{std.core.String}:C{@ohos.window.window.Window}", reinterpret_cast(CreateSubWindow)}, ani_native_function {"onSync", nullptr, reinterpret_cast(AniWindowStage::RegisterWindowCallback)}, ani_native_function {"offSync", nullptr, reinterpret_cast(AniWindowStage::UnregisterWindowCallback)}, - ani_native_function {"nativeTransferStatic", "Lstd/interop/ESValue;:Lstd/core/Object;", + ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}:C{std.core.Object}", reinterpret_cast(AniWindowStage::NativeTransferStatic)}, - ani_native_function {"nativeTransferDynamic", "J:Lstd/interop/ESValue;", + ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", reinterpret_cast(AniWindowStage::NativeTransferDynamic)}, }; for (auto method : methods) { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 3a2d6315f5..43252d85bb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -72,7 +72,7 @@ ani_status AniWindowUtils::GetStdStringVector(ani_env* env, ani_object ary, std: } for (int32_t i = 0; i< static_cast(length); i++) { ani_ref stringRef; - ret = env->Object_CallMethodByName_Ref(ary, "$_get", "I:Lstd/core/Object;", &stringRef, ani_int(i)); + ret = env->Object_CallMethodByName_Ref(ary, "$_get", "i:C{std.core.Object}", &stringRef, ani_int(i)); if (ret != ANI_OK) { return ret; } @@ -238,7 +238,7 @@ ani_object AniWindowUtils::CreateAniSize(ani_env* env, int32_t width, int32_t he { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/SizeInternal;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.SizeInternal", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -264,7 +264,7 @@ ani_object AniWindowUtils::CreateAniDecorButtonStyle(ani_env* env, const DecorBu { TLOGI(WmsLogTag::WMS_DECOR, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/DecorButtonStyle;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.DecorButtonStyle", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::WMS_DECOR, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -296,7 +296,7 @@ ani_object AniWindowUtils::CreateAniTitleButtonRect(ani_env* env, const TitleBut { TLOGI(WmsLogTag::WMS_DECOR, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/TitleButtonRect;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.TitleButtonRect", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::WMS_DECOR, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -325,7 +325,7 @@ ani_object AniWindowUtils::CreateAniWindowArray(ani_env* env, std::vectorFindClass("L@ohos/window/window/WindowInternal;", &windowCls) != ANI_OK) { + if (env->FindClass("@ohos.window.window.WindowInternal", &windowCls) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); } @@ -346,7 +346,7 @@ ani_object AniWindowUtils::CreateAniRect(ani_env* env, const Rect& rect) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/RectInternal;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.RectInternal", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -374,7 +374,7 @@ ani_object AniWindowUtils::CreateAniAvoidArea(ani_env* env, const AvoidArea& avo { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/AvoidAreaInternal;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.AvoidAreaInternal", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -408,7 +408,7 @@ ani_object AniWindowUtils::CreateAniKeyboardInfo(ani_env* env, const KeyboardPan { TLOGI(WmsLogTag::WMS_KEYBOARD, "[ANI]"); ani_class aniClass; - ani_status ret = env->FindClass("L@ohos/window/window/KeyboardInfoInternal;", &aniClass); + ani_status ret = env->FindClass("@ohos.window.window.KeyboardInfoInternal", &aniClass); if (ret != ANI_OK) { TLOGE(WmsLogTag::WMS_KEYBOARD, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); @@ -437,7 +437,7 @@ ani_object AniWindowUtils::CreateAniSystemBarTintState(ani_env* env, DisplayId d { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); ani_class aniClass; - if (env->FindClass("L@ohos/window/window/SystemBarTintStateInternal;", &aniClass) != ANI_OK) { + if (env->FindClass("@ohos.window.window.SystemBarTintStateInternal", &aniClass) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); } @@ -454,7 +454,7 @@ ani_object AniWindowUtils::CreateAniSystemBarTintState(ani_env* env, DisplayId d CallAniMethodVoid(env, state, aniClass, "displayId", nullptr, static_cast(displayId)); ani_array_ref regionTintArray = nullptr; ani_class regionTintCls; - if (env->FindClass("L@ohos/window/window/SystemBarRegionTintInternal;", ®ionTintCls) != ANI_OK) { + if (env->FindClass("@ohos.window.window.SystemBarRegionTintInternal", ®ionTintCls) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); } @@ -475,7 +475,7 @@ ani_object AniWindowUtils::CreateAniSystemBarTintState(ani_env* env, DisplayId d ani_object AniWindowUtils::CreateAniSystemBarRegionTint(ani_env* env, const SystemBarRegionTint& tint) { ani_class regionTintCls; - if (env->FindClass("L@ohos/window/window/SystemBarRegionTintInternal;", ®ionTintCls) != ANI_OK) { + if (env->FindClass("@ohos.window.window.SystemBarRegionTintInternal", ®ionTintCls) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found"); return AniWindowUtils::CreateAniUndefined(env); } @@ -758,7 +758,7 @@ ani_object AniWindowUtils::CreateWindowsProperties(ani_env* env, const sptrFindClass("Lapplication/UIAbilityContext/UIAbilityContext;", &cls)) != ANI_OK) { + if ((status = env->FindClass("application.UIAbilityContext.UIAbilityContext", &cls)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find class fail, status : %{public}d", status); return nullptr; } diff --git a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_err_utils.cpp b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_err_utils.cpp index bdb8005778..ca99003521 100644 --- a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_err_utils.cpp +++ b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_err_utils.cpp @@ -91,13 +91,13 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st { TLOGI(WmsLogTag::DMS, "[ANI] in1"); ani_class aniClass; - ani_status status = env->FindClass("Lescompat/Error;", &aniClass); + ani_status status = env->FindClass("escompat.Error", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] class not found, status:%{public}d", static_cast(status)); return status; } ani_method aniCtor; - status = env->Class_FindMethod(aniClass, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &aniCtor); + status = env->Class_FindMethod(aniClass, "", "C{std.core.String}C{escompat.ErrorOptions}:", &aniCtor); if (status != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] ctor not found, status:%{public}d", static_cast(status)); return status; @@ -112,4 +112,4 @@ ani_status AniErrUtils::CreateBusinessError(ani_env* env, int32_t error, std::st return ANI_OK; } -} // namespace OHOS::Rosen \ No newline at end of file +} // namespace OHOS::Rosen diff --git a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_scene_session_manager.cpp b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_scene_session_manager.cpp index e3d4c6248e..9af3f7f33a 100644 --- a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_scene_session_manager.cpp +++ b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/src/ani_scene_session_manager.cpp @@ -28,7 +28,7 @@ ani_status AniSceneSessionManager::Init(ani_env* env, ani_namespace nsp) { TLOGI(WmsLogTag::DEFAULT, "[ANI] AniSceneSessionManager Init"); ani_function setObjFunc = nullptr; - ani_status ret = env->Namespace_FindFunction(nsp, "setSceneSessionManagerRef", "J:V", &setObjFunc); + ani_status ret = env->Namespace_FindFunction(nsp, "setSceneSessionManagerRef", "l:", &setObjFunc); if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] find setSceneSessionManagerRef func fail %{public}u", ret); return ret; @@ -79,12 +79,12 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) return ANI_NOT_FOUND; } ani_namespace nsp; - if ((ret = env->FindNamespace("L@ohos/sceneSessionManager/sceneSessionManager;", &nsp)) != ANI_OK) { + if ((ret = env->FindNamespace("@ohos.sceneSessionManager.sceneSessionManager", &nsp)) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] null env %{public}u", ret); return ANI_NOT_FOUND; } std::array funcs = { - ani_native_function {"getRootSceneUIContextSync", "J:L@ohos/arkui/UIContext/UIContext;", + ani_native_function {"getRootSceneUIContextSync", "l:C{@ohos.arkui.UIContext.UIContext}", reinterpret_cast(AniSceneSessionManager::GetRootSceneUIContext)} }; if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { @@ -98,4 +98,4 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) } } // namespace Rosen -} // namespace OHOS \ No newline at end of file +} // namespace OHOS -- Gitee From 6953b1658b7c9cda4cae873df1fa735f8bba0ea8 Mon Sep 17 00:00:00 2001 From: liuanguang Date: Mon, 4 Aug 2025 10:25:15 +0800 Subject: [PATCH 072/109] fix(wms-layout): fix issue where windowRectChange ANI interface failed to invoke callback Signed-off-by: liuanguang --- .../window_stage_ani/ets/@ohos.window.ets | 25 +++++++++++++++---- .../src/ani_window_listener.cpp | 6 ++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 2b198a334f..9d2eac50fe 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -426,6 +426,16 @@ namespace window { regionTint: Array; } + export enum RectChangeReason { + UNDEFINED = 0, + MAXIMIZE = 1, + RECOVER = 2, + MOVE = 3, + DRAG = 4, + DRAG_START = 5, + DRAG_END = 6, + } + export interface Rect { /** * The left of the Rect. @@ -531,6 +541,11 @@ namespace window { height: int; } + export interface RectChangeOptions { + rect: Rect; + reason: RectChangeReason; + } + export class SizeInternal implements Size { width: int; height: int; @@ -3171,16 +3186,16 @@ function runWindowTouchOutCallback(cb: object): void { func(); } -function runWindowRectCallback(cb: object, cbArg: object): void { - const func = cb as (cbArg: Rect) => void; - func(cbArg as Rect); -} - function runWindowSizeCallback(cb: object, cbArg: object): void { const func = cb as (cbArg: Size) => void; func(cbArg as Size); } +function runWindowRectChangeCallback(cb: object, rect: object, reason: int): void { + const func = cb as (data: RectChangeOptions) => void; + func({rect: rect as Rect, reason: reason as RectChangeReason}); +} + function runKeyboardHeightChangeCallback(cb: object, cbArg: int): void { const func = cb as (cbArg: int) => void; func(cbArg as int); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index a9e367f619..d7fb7b6943 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -486,15 +486,15 @@ void AniWindowListener::OnRectChange(Rect rect, WindowSizeChangeReason reason) TLOGD(WmsLogTag::WMS_LAYOUT, "drag end change to move event"); rectChangeReason = RectChangeReason::MOVE; } - auto task = [self = weakRef_, rect, reason, eng = env_] () { + auto task = [self = weakRef_, rect, rectChangeReason, eng = env_] () { auto thisListener = self.promote(); if (thisListener == nullptr || eng == nullptr || thisListener->aniCallback_ == nullptr) { TLOGE(WmsLogTag::WMS_LAYOUT, "[ANI]this listener, eng or callback is nullptr"); return; } - AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowRectCallback", + AniWindowUtils::CallAniFunctionVoid(eng, "@ohos.window.window", "runWindowRectChangeCallback", nullptr, thisListener->aniCallback_, AniWindowUtils::CreateAniRect(eng, rect), - static_cast(reason)); + static_cast(rectChangeReason)); }; if (!eventHandler_) { TLOGE(WmsLogTag::WMS_LAYOUT, "get main event handler failed!"); -- Gitee From e2ec31dd83c3266a81b2250837263f6f95bac583 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 9 Aug 2025 11:42:54 +0800 Subject: [PATCH 073/109] transfer window class Signed-off-by: wangzilin --- interfaces/kits/ani/window_runtime/BUILD.gn | 2 + .../window_stage_ani/ets/@ohos.window.ets | 13 + .../window_stage_ani/include/ani_window.h | 4 + .../include/ani_window_listener.h | 26 -- .../include/ani_window_register_manager.h | 29 --- .../include/ani_window_utils.h | 228 +----------------- .../window_stage_ani/src/ani_window.cpp | 70 ++++++ .../window_stage_ani/src/ani_window_stage.cpp | 4 - .../window_runtime/window_napi/js_window.h | 1 + 9 files changed, 93 insertions(+), 284 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index c2589ba485..52d564af1d 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -64,6 +64,7 @@ ohos_shared_library("windowstageani_kit") { "../../../../utils:libwmutil_base", "../../../../wm:libwm", "../../../../interfaces/kits/napi/window_runtime:windowstage_kit", + "../../../../interfaces/kits/napi/window_runtime:window_native_kit", ] external_deps = [ @@ -119,6 +120,7 @@ ohos_shared_library("windowstageani_module") { "../../../../utils:libwmutil_base", "../../../../wm:libwm", ":windowstageani_kit", + "../../../../interfaces/kits/napi/window_runtime:window_native_kit", ] external_deps = [ diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 9d2eac50fe..10a669ebe3 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1976,6 +1976,9 @@ export class WindowInternal implements Window { this.nativeObj = nativeObject; } + private static native nativeTransferStatic(input: ESValue): Object; + private static native nativeTransferDynamic(nativeObj: long): ESValue; + private native setFollowParentWindowLayoutEnabled(nativeObj: long, enabled: boolean): void; private native setWindowDelayRaiseOnDrag(nativeObj: long, isEnabled: boolean): void; private native getParentWindow(nativeObj: long): Window; @@ -2046,6 +2049,16 @@ export class WindowInternal implements Window { private native onSync(nativeObj: long, type: string, callback: object): void; private native offSync(nativeObj: long, type: string, callback?: object): void; + public static transferStatic(input: Any): Object { + hilog.info(DOMAIN, TAG, 'window transfer static, input:' + input); + return WindowInternal.nativeTransferStatic(ESValue.wrap(input)); + } + + public static transferDynamic(input: Object): Any { + hilog.info(DOMAIN, TAG, 'window transfer dynamic, input:' + input); + return WindowInternal.nativeTransferDynamic((input as WindowInternal).nativeObj).unwrap(); + } + public setFollowParentWindowLayoutEnabled(enabled: boolean): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { taskpool.execute((): void => { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h index df56a2c187..6e8281d648 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window.h @@ -37,6 +37,10 @@ public: ani_ref GetAniRef() { return aniRef_; } void SetAniRef(const ani_ref& aniRef) { aniRef_ = aniRef; } + // transfer + static ani_object NativeTransferStatic(ani_env* aniEnv, ani_class cls, ani_object input); + static ani_object NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_long nativeObj); + /* window obj stored in ANI */ static AniWindow* GetWindowObjectFromEnv(ani_env* env, ani_object obj); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 52a4b7aa83..0379019bfb 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -29,32 +29,6 @@ namespace OHOS { namespace Rosen { -const std::string WINDOW_SIZE_CHANGE_CB = "windowSizeChange"; -const std::string SYSTEM_BAR_TINT_CHANGE_CB = "systemBarTintChange"; -const std::string SYSTEM_AVOID_AREA_CHANGE_CB = "systemAvoidAreaChange"; -const std::string AVOID_AREA_CHANGE_CB = "avoidAreaChange"; -const std::string LIFECYCLE_EVENT_CB = "lifeCycleEvent"; -const std::string WINDOW_STAGE_EVENT_CB = "windowStageEvent"; -const std::string WINDOW_EVENT_CB = "windowEvent"; -const std::string KEYBOARD_HEIGHT_CHANGE_CB = "keyboardHeightChange"; -const std::string KEYBOARD_DID_SHOW_CB = "keyboardDidShow"; -const std::string KEYBOARD_DID_HIDE_CB = "keyboardDidHide"; -const std::string TOUCH_OUTSIDE_CB = "touchOutside"; -const std::string SCREENSHOT_EVENT_CB = "screenshot"; -const std::string DIALOG_TARGET_TOUCH_CB = "dialogTargetTouch"; -const std::string DIALOG_DEATH_RECIPIENT_CB = "dialogDeathRecipient"; -const std::string GESTURE_NAVIGATION_ENABLED_CHANGE_CB = "gestureNavigationEnabledChange"; -const std::string WATER_MARK_FLAG_CHANGE_CB = "waterMarkFlagChange"; -const std::string WINDOW_VISIBILITY_CHANGE_CB = "windowVisibilityChange"; -const std::string WINDOW_STATUS_CHANGE_CB = "windowStatusChange"; -const std::string WINDOW_TITLE_BUTTON_RECT_CHANGE_CB = "windowTitleButtonRectChange"; -const std::string WINDOW_NO_INTERACTION_DETECT_CB = "noInteractionDetected"; -const std::string WINDOW_RECT_CHANGE_CB = "windowRectChange"; -const std::string SUB_WINDOW_CLOSE_CB = "subWindowClose"; -const std::string WINDOW_HIGHLIGHT_CHANGE_CB = "windowHighlightChange"; -const std::string WINDOW_STAGE_CLOSE_CB = "windowStageClose"; -const std::string SYSTEM_DENSITY_CHANGE_CB = "systemDensityChange"; -const std::string WINDOW_DISPLAYID_CHANGE_CB = "displayIdChange"; class AniWindowListener : public IWindowChangeListener, public ISystemBarChangedListener, diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index 73c62e4fab..ae2dd5ed29 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -24,35 +24,6 @@ namespace OHOS { namespace Rosen { -enum class RegisterListenerType : uint32_t { - SYSTEM_BAR_TINT_CHANGE_CB, - GESTURE_NAVIGATION_ENABLED_CHANGE_CB, - WATER_MARK_FLAG_CHANGE_CB, - WINDOW_SIZE_CHANGE_CB, - SYSTEM_AVOID_AREA_CHANGE_CB, - AVOID_AREA_CHANGE_CB, - LIFECYCLE_EVENT_CB, - WINDOW_EVENT_CB, - KEYBOARD_HEIGHT_CHANGE_CB, - KEYBOARD_DID_SHOW_CB, - KEYBOARD_DID_HIDE_CB, - TOUCH_OUTSIDE_CB, - SCREENSHOT_EVENT_CB, - DIALOG_TARGET_TOUCH_CB, - DIALOG_DEATH_RECIPIENT_CB, - WINDOW_STATUS_CHANGE_CB, - WINDOW_TITLE_BUTTON_RECT_CHANGE_CB, - WINDOW_VISIBILITY_CHANGE_CB, - WINDOW_NO_INTERACTION_DETECT_CB, - WINDOW_RECT_CHANGE_CB, - SUB_WINDOW_CLOSE_CB, - WINDOW_HIGHLIGHT_CHANGE_CB, - WINDOW_STAGE_EVENT_CB, - WINDOW_STAGE_CLOSE_CB, - SYSTEM_DENSITY_CHANGE_CB, - WINDOW_DISPLAYID_CHANGE_CB, -}; - class AniWindowRegisterManager { public: AniWindowRegisterManager(); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 6bfb946709..178bc9cb8e 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -13,10 +13,11 @@ * limitations under the License. */ -#ifndef OHOS_JS_WINDOW_UTILS_H -#define OHOS_JS_WINDOW_UTILS_H +#ifndef OHOS_ANI_WINDOW_UTILS_H +#define OHOS_ANI_WINDOW_UTILS_H #include #include "ani.h" +#include "js_window.h" #include "native_engine/native_engine.h" #include "native_engine/native_value.h" #include "window.h" @@ -33,230 +34,7 @@ namespace OHOS { namespace Rosen { -constexpr int32_t RGB_LENGTH = 6; -constexpr int32_t RGBA_LENGTH = 8; constexpr Rect g_emptyRect = {0, 0, 0, 0}; - -enum class ApiWindowType : uint32_t { - TYPE_BASE, - TYPE_APP = TYPE_BASE, - TYPE_SYSTEM_ALERT, - TYPE_INPUT_METHOD, - TYPE_STATUS_BAR, - TYPE_PANEL, - TYPE_KEYGUARD, - TYPE_VOLUME_OVERLAY, - TYPE_NAVIGATION_BAR, - TYPE_FLOAT, - TYPE_WALLPAPER, - TYPE_DESKTOP, - TYPE_LAUNCHER_RECENT, - TYPE_LAUNCHER_DOCK, - TYPE_VOICE_INTERACTION, - TYPE_POINTER, - TYPE_FLOAT_CAMERA, - TYPE_DIALOG, - TYPE_SCREENSHOT, - TYPE_SYSTEM_TOAST, - TYPE_DIVIDER, - TYPE_GLOBAL_SEARCH, - TYPE_HANDWRITE, - TYPE_END -}; - -enum class LifeCycleEventType : uint32_t { - FOREGROUND = 1, - ACTIVE, - INACTIVE, - BACKGROUND, - RESUMED, - PAUSED, - DESTROYED, -}; - -const std::map NATIVE_JS_TO_WINDOW_TYPE_MAP { - { WindowType::WINDOW_TYPE_APP_SUB_WINDOW, ApiWindowType::TYPE_APP }, - { WindowType::WINDOW_TYPE_DIALOG, ApiWindowType::TYPE_DIALOG }, - { WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW, ApiWindowType::TYPE_SYSTEM_ALERT }, - { WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT, ApiWindowType::TYPE_INPUT_METHOD }, - { WindowType::WINDOW_TYPE_STATUS_BAR, ApiWindowType::TYPE_STATUS_BAR }, - { WindowType::WINDOW_TYPE_PANEL, ApiWindowType::TYPE_PANEL }, - { WindowType::WINDOW_TYPE_KEYGUARD, ApiWindowType::TYPE_KEYGUARD }, - { WindowType::WINDOW_TYPE_VOLUME_OVERLAY, ApiWindowType::TYPE_VOLUME_OVERLAY }, - { WindowType::WINDOW_TYPE_NAVIGATION_BAR, ApiWindowType::TYPE_NAVIGATION_BAR }, - { WindowType::WINDOW_TYPE_FLOAT, ApiWindowType::TYPE_FLOAT }, - { WindowType::WINDOW_TYPE_FLOAT_CAMERA, ApiWindowType::TYPE_FLOAT_CAMERA }, - { WindowType::WINDOW_TYPE_WALLPAPER, ApiWindowType::TYPE_WALLPAPER }, - { WindowType::WINDOW_TYPE_DESKTOP, ApiWindowType::TYPE_DESKTOP }, - { WindowType::WINDOW_TYPE_LAUNCHER_RECENT, ApiWindowType::TYPE_LAUNCHER_RECENT }, - { WindowType::WINDOW_TYPE_LAUNCHER_DOCK, ApiWindowType::TYPE_LAUNCHER_DOCK }, - { WindowType::WINDOW_TYPE_VOICE_INTERACTION, ApiWindowType::TYPE_VOICE_INTERACTION }, - { WindowType::WINDOW_TYPE_POINTER, ApiWindowType::TYPE_POINTER }, - { WindowType::WINDOW_TYPE_SCREENSHOT, ApiWindowType::TYPE_SCREENSHOT }, - { WindowType::WINDOW_TYPE_SYSTEM_TOAST, ApiWindowType::TYPE_SYSTEM_TOAST }, - { WindowType::WINDOW_TYPE_DOCK_SLICE, ApiWindowType::TYPE_DIVIDER }, - { WindowType::WINDOW_TYPE_GLOBAL_SEARCH, ApiWindowType::TYPE_GLOBAL_SEARCH }, - { WindowType::WINDOW_TYPE_HANDWRITE, ApiWindowType::TYPE_HANDWRITE }, -}; - -const std::map JS_TO_NATIVE_WINDOW_TYPE_MAP { - { ApiWindowType::TYPE_APP, WindowType::WINDOW_TYPE_APP_SUB_WINDOW }, - { ApiWindowType::TYPE_DIALOG, WindowType::WINDOW_TYPE_DIALOG }, - { ApiWindowType::TYPE_SYSTEM_ALERT, WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW }, - { ApiWindowType::TYPE_INPUT_METHOD, WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT }, - { ApiWindowType::TYPE_STATUS_BAR, WindowType::WINDOW_TYPE_STATUS_BAR }, - { ApiWindowType::TYPE_PANEL, WindowType::WINDOW_TYPE_PANEL }, - { ApiWindowType::TYPE_KEYGUARD, WindowType::WINDOW_TYPE_KEYGUARD }, - { ApiWindowType::TYPE_VOLUME_OVERLAY, WindowType::WINDOW_TYPE_VOLUME_OVERLAY }, - { ApiWindowType::TYPE_NAVIGATION_BAR, WindowType::WINDOW_TYPE_NAVIGATION_BAR }, - { ApiWindowType::TYPE_FLOAT, WindowType::WINDOW_TYPE_FLOAT }, - { ApiWindowType::TYPE_FLOAT_CAMERA, WindowType::WINDOW_TYPE_FLOAT_CAMERA }, - { ApiWindowType::TYPE_WALLPAPER, WindowType::WINDOW_TYPE_WALLPAPER }, - { ApiWindowType::TYPE_DESKTOP, WindowType::WINDOW_TYPE_DESKTOP }, - { ApiWindowType::TYPE_LAUNCHER_RECENT, WindowType::WINDOW_TYPE_LAUNCHER_RECENT }, - { ApiWindowType::TYPE_LAUNCHER_DOCK, WindowType::WINDOW_TYPE_LAUNCHER_DOCK }, - { ApiWindowType::TYPE_VOICE_INTERACTION, WindowType::WINDOW_TYPE_VOICE_INTERACTION }, - { ApiWindowType::TYPE_POINTER, WindowType::WINDOW_TYPE_POINTER }, - { ApiWindowType::TYPE_SCREENSHOT, WindowType::WINDOW_TYPE_SCREENSHOT }, - { ApiWindowType::TYPE_SYSTEM_TOAST, WindowType::WINDOW_TYPE_SYSTEM_TOAST }, - { ApiWindowType::TYPE_DIVIDER, WindowType::WINDOW_TYPE_DOCK_SLICE }, - { ApiWindowType::TYPE_GLOBAL_SEARCH, WindowType::WINDOW_TYPE_GLOBAL_SEARCH }, - { ApiWindowType::TYPE_HANDWRITE, WindowType::WINDOW_TYPE_HANDWRITE }, -}; - -enum class ApiWindowMode : uint32_t { - UNDEFINED = 1, - FULLSCREEN, - PRIMARY, - SECONDARY, - FLOATING, - MODE_END = FLOATING -}; - -const std::map NATIVE_TO_JS_WINDOW_MODE_MAP { - { WindowMode::WINDOW_MODE_UNDEFINED, ApiWindowMode::UNDEFINED }, - { WindowMode::WINDOW_MODE_FULLSCREEN, ApiWindowMode::FULLSCREEN }, - { WindowMode::WINDOW_MODE_SPLIT_PRIMARY, ApiWindowMode::PRIMARY }, - { WindowMode::WINDOW_MODE_SPLIT_SECONDARY, ApiWindowMode::SECONDARY }, - { WindowMode::WINDOW_MODE_FLOATING, ApiWindowMode::FLOATING }, -}; - -const std::map JS_TO_NATIVE_WINDOW_MODE_MAP { - {ApiWindowMode::UNDEFINED, WindowMode::WINDOW_MODE_UNDEFINED }, - {ApiWindowMode::FULLSCREEN, WindowMode::WINDOW_MODE_FULLSCREEN }, - {ApiWindowMode::PRIMARY, WindowMode::WINDOW_MODE_SPLIT_PRIMARY }, - {ApiWindowMode::SECONDARY, WindowMode::WINDOW_MODE_SPLIT_SECONDARY }, - {ApiWindowMode::FLOATING, WindowMode::WINDOW_MODE_FLOATING }, -}; - -enum class ApiOrientation : uint32_t { - BEGIN = 0, - UNSPECIFIED = BEGIN, - PORTRAIT = 1, - LANDSCAPE = 2, - PORTRAIT_INVERTED = 3, - LANDSCAPE_INVERTED = 4, - AUTO_ROTATION = 5, - AUTO_ROTATION_PORTRAIT = 6, - AUTO_ROTATION_LANDSCAPE = 7, - AUTO_ROTATION_RESTRICTED = 8, - AUTO_ROTATION_PORTRAIT_RESTRICTED = 9, - AUTO_ROTATION_LANDSCAPE_RESTRICTED = 10, - LOCKED = 11, - AUTO_ROTATION_UNSPECIFIED = 12, - USER_ROTATION_PORTRAIT = 13, - USER_ROTATION_LANDSCAPE = 14, - USER_ROTATION_PORTRAIT_INVERTED = 15, - USER_ROTATION_LANDSCAPE_INVERTED = 16, - FOLLOW_DESKTOP = 17, - END = FOLLOW_DESKTOP, -}; - -const std::map JS_TO_NATIVE_ORIENTATION_MAP { - {ApiOrientation::UNSPECIFIED, Orientation::UNSPECIFIED }, - {ApiOrientation::PORTRAIT, Orientation::VERTICAL }, - {ApiOrientation::LANDSCAPE, Orientation::HORIZONTAL }, - {ApiOrientation::PORTRAIT_INVERTED, Orientation::REVERSE_VERTICAL }, - {ApiOrientation::LANDSCAPE_INVERTED, Orientation::REVERSE_HORIZONTAL }, - {ApiOrientation::AUTO_ROTATION, Orientation::SENSOR }, - {ApiOrientation::AUTO_ROTATION_PORTRAIT, Orientation::SENSOR_VERTICAL }, - {ApiOrientation::AUTO_ROTATION_LANDSCAPE, Orientation::SENSOR_HORIZONTAL }, - {ApiOrientation::AUTO_ROTATION_RESTRICTED, Orientation::AUTO_ROTATION_RESTRICTED }, - {ApiOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED }, - {ApiOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED }, - {ApiOrientation::LOCKED, Orientation::LOCKED }, - {ApiOrientation::AUTO_ROTATION_UNSPECIFIED, Orientation::AUTO_ROTATION_UNSPECIFIED }, - {ApiOrientation::USER_ROTATION_PORTRAIT, Orientation::USER_ROTATION_PORTRAIT }, - {ApiOrientation::USER_ROTATION_LANDSCAPE, Orientation::USER_ROTATION_LANDSCAPE }, - {ApiOrientation::USER_ROTATION_PORTRAIT_INVERTED, Orientation::USER_ROTATION_PORTRAIT_INVERTED }, - {ApiOrientation::USER_ROTATION_LANDSCAPE_INVERTED, Orientation::USER_ROTATION_LANDSCAPE_INVERTED }, - {ApiOrientation::FOLLOW_DESKTOP, Orientation::FOLLOW_DESKTOP }, -}; - -const std::map NATIVE_TO_JS_ORIENTATION_MAP { - {Orientation::UNSPECIFIED, ApiOrientation::UNSPECIFIED }, - {Orientation::VERTICAL, ApiOrientation::PORTRAIT }, - {Orientation::HORIZONTAL, ApiOrientation::LANDSCAPE }, - {Orientation::REVERSE_VERTICAL, ApiOrientation::PORTRAIT_INVERTED }, - {Orientation::REVERSE_HORIZONTAL, ApiOrientation::LANDSCAPE_INVERTED }, - {Orientation::SENSOR, ApiOrientation::AUTO_ROTATION }, - {Orientation::SENSOR_VERTICAL, ApiOrientation::AUTO_ROTATION_PORTRAIT }, - {Orientation::SENSOR_HORIZONTAL, ApiOrientation::AUTO_ROTATION_LANDSCAPE }, - {Orientation::AUTO_ROTATION_RESTRICTED, ApiOrientation::AUTO_ROTATION_RESTRICTED }, - {Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, ApiOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED }, - {Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, ApiOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED }, - {Orientation::LOCKED, ApiOrientation::LOCKED }, - {Orientation::FOLLOW_RECENT, ApiOrientation::UNSPECIFIED }, - {Orientation::AUTO_ROTATION_UNSPECIFIED, ApiOrientation::AUTO_ROTATION_UNSPECIFIED }, - {Orientation::USER_ROTATION_PORTRAIT, ApiOrientation::USER_ROTATION_PORTRAIT }, - {Orientation::USER_ROTATION_LANDSCAPE, ApiOrientation::USER_ROTATION_LANDSCAPE }, - {Orientation::USER_ROTATION_PORTRAIT_INVERTED, ApiOrientation::USER_ROTATION_PORTRAIT_INVERTED }, - {Orientation::USER_ROTATION_LANDSCAPE_INVERTED, ApiOrientation::USER_ROTATION_LANDSCAPE_INVERTED }, - {Orientation::FOLLOW_DESKTOP, ApiOrientation::FOLLOW_DESKTOP }, -}; - -enum class RectChangeReason : uint32_t { - UNDEFINED = 0, - MAXIMIZE, - RECOVER, - MOVE, - DRAG, - DRAG_START, - DRAG_END, -}; - -const std::map JS_SIZE_CHANGE_REASON { - { WindowSizeChangeReason::UNDEFINED, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::MAXIMIZE, RectChangeReason::MAXIMIZE }, - { WindowSizeChangeReason::RECOVER, RectChangeReason::RECOVER }, - { WindowSizeChangeReason::ROTATION, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::DRAG, RectChangeReason::DRAG }, - { WindowSizeChangeReason::DRAG_START, RectChangeReason::DRAG_START }, - { WindowSizeChangeReason::DRAG_END, RectChangeReason::DRAG_END }, - { WindowSizeChangeReason::RESIZE, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::MOVE, RectChangeReason::MOVE }, - { WindowSizeChangeReason::HIDE, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::TRANSFORM, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::CUSTOM_ANIMATION_SHOW, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::FULL_TO_SPLIT, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::SPLIT_TO_FULL, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::FULL_TO_FLOATING, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::FLOATING_TO_FULL, RectChangeReason::UNDEFINED }, - { WindowSizeChangeReason::END, RectChangeReason::UNDEFINED }, -}; - -enum class ApiModalityType : uint32_t { - BEGIN = 0, - WINDOW_MODALITY = BEGIN, - APPLICATION_MODALITY, - END = APPLICATION_MODALITY, -}; - -inline const std::map JS_TO_NATIVE_MODALITY_TYPE_MAP { - { ApiModalityType::WINDOW_MODALITY, ModalityType::WINDOW_MODALITY }, - { ApiModalityType::APPLICATION_MODALITY, ModalityType::APPLICATION_MODALITY }, -}; - class AniWindowUtils { public: static ani_status GetStdString(ani_env* env, ani_string ani_str, std::string& result); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 98865663ba..0ec3e16ca8 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -23,6 +23,10 @@ #include "ani.h" #include "ani_err_utils.h" #include "ani_window_utils.h" +#include "interop_js/arkts_esvalue.h" +#include "interop_js/arkts_interop_js_api.h" +#include "interop_js/hybridgref_ani.h" +#include "interop_js/hybridgref_napi.h" #include "permission.h" #include "pixel_map.h" #include "pixel_map_taihe_ani.h" @@ -71,6 +75,68 @@ AniWindow* AniWindow::GetWindowObjectFromEnv(ani_env* env, ani_object obj) return reinterpret_cast(nativeObj); } +ani_object AniWindow::NativeTransferStatic(ani_env* aniEnv, ani_class cls, ani_object input) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + void *unwrapResult = nullptr; + if (!arkts_esvalue_unwrap(aniEnv, input, &unwrapResult)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] fail to unwrap input"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + if (unwrapResult == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] unwrapResult is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + JsWindow* jsWindow = static_cast(unwrapResult); + sptr windowToken = jsWindow->GetWindow(); + ani_ref aniWindowObj = CreateAniWindowObject(aniEnv, windowToken); + if (aniWindowObj == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] ani window object is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + return static_cast(aniWindowObj); +} + +ani_object AniWindow::NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + napi_env napiEnv {}; + if (!arkts_napi_scope_open(aniEnv, &napiEnv)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] napi scope open fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + sptr windowToken = aniWindow->GetWindow(); + napi_value jsWindow = CreateJsWindowObject(napiEnv, windowToken); + hybridgref ref {}; + if (!hybridgref_create_from_napi(napiEnv, jsWindow, &ref)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] create hybridgref fail"); + arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + ani_object result {}; + if (!hybridgref_get_esvalue(aniEnv, ref, &result)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] get esvalue fail"); + hybridgref_delete_from_napi(napiEnv, ref); + arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + if (!hybridgref_delete_from_napi(napiEnv, ref)) { + arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + TLOGE(WmsLogTag::DEFAULT, "[ANI] delete hybridgref fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + if (!arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr)) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] napi close scope fail"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } + return result; +} + void AniWindow::SetWindowColorSpace(ani_env* env, ani_object obj, ani_long nativeObj, ani_int colorSpace) { TLOGI(WmsLogTag::DEFAULT, "[ANI] colorSpace:%{public}d", static_cast(colorSpace)); @@ -2785,6 +2851,10 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindow::HideWithAnimation)}, ani_native_function {"showWithAnimationSync", nullptr, reinterpret_cast(AniWindow::ShowWithAnimation)}, + ani_native_function {"nativeTransferStatic", "Lstd/interop/ESValue;:Lstd/core/Object;", + reinterpret_cast(AniWindow::NativeTransferStatic)}, + ani_native_function {"nativeTransferDynamic", "J:Lstd/interop/ESValue;", + reinterpret_cast(AniWindow::NativeTransferDynamic)}, }; for (auto method : methods) { if ((ret = env->Class_BindNativeMethods(cls, &method, 1u)) != ANI_OK) { diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 093e311e82..3e4e55c8d9 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -63,10 +63,6 @@ ani_object AniWindowStage::NativeTransferStatic(ani_env* aniEnv, ani_class cls, return AniWindowUtils::CreateAniUndefined(aniEnv); } JsWindowStage* jsWindowStage = static_cast(unwrapResult); - if (jsWindowStage == nullptr) { - TLOGE(WmsLogTag::WMS_LIFE, "[ANI] jsWindowStage is nullptr"); - return AniWindowUtils::CreateAniUndefined(aniEnv); - } std::shared_ptr windowScene = jsWindowStage->GetWindowScene().lock(); return CreateAniWindowStage(aniEnv, windowScene); } diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.h b/interfaces/kits/napi/window_runtime/window_napi/js_window.h index d2b29df191..ef3ba55df5 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.h @@ -43,6 +43,7 @@ class JsWindow final { public: explicit JsWindow(const sptr& window); ~JsWindow(); + sptr GetWindow() { return windowToken_; } static void Finalizer(napi_env env, void* data, void* hint); static napi_value Show(napi_env env, napi_callback_info info); static napi_value ShowWindow(napi_env env, napi_callback_info info); -- Gitee From 1cdba693f8cc9fd050a69670287b3f4184f2e9b2 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 9 Aug 2025 11:51:50 +0800 Subject: [PATCH 074/109] fix bug Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/src/ani_window_stage.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp index 3e4e55c8d9..093e311e82 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_stage.cpp @@ -63,6 +63,10 @@ ani_object AniWindowStage::NativeTransferStatic(ani_env* aniEnv, ani_class cls, return AniWindowUtils::CreateAniUndefined(aniEnv); } JsWindowStage* jsWindowStage = static_cast(unwrapResult); + if (jsWindowStage == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "[ANI] jsWindowStage is nullptr"); + return AniWindowUtils::CreateAniUndefined(aniEnv); + } std::shared_ptr windowScene = jsWindowStage->GetWindowScene().lock(); return CreateAniWindowStage(aniEnv, windowScene); } -- Gitee From d307ba438e6753f3f25c30148c1c83c782fa3653 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 9 Aug 2025 14:55:02 +0800 Subject: [PATCH 075/109] close scope Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/src/ani_window.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 0ec3e16ca8..73c9bf27a0 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -115,18 +115,18 @@ ani_object AniWindow::NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_ hybridgref ref {}; if (!hybridgref_create_from_napi(napiEnv, jsWindow, &ref)) { TLOGE(WmsLogTag::DEFAULT, "[ANI] create hybridgref fail"); - arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); return AniWindowUtils::CreateAniUndefined(aniEnv); } ani_object result {}; if (!hybridgref_get_esvalue(aniEnv, ref, &result)) { TLOGE(WmsLogTag::DEFAULT, "[ANI] get esvalue fail"); hybridgref_delete_from_napi(napiEnv, ref); - arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); return AniWindowUtils::CreateAniUndefined(aniEnv); } if (!hybridgref_delete_from_napi(napiEnv, ref)) { - arkts_napi_scope_close(napiEnv, 0, nullptr, nullptr); + arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); TLOGE(WmsLogTag::DEFAULT, "[ANI] delete hybridgref fail"); return AniWindowUtils::CreateAniUndefined(aniEnv); } -- Gitee From 93d8afd466c43dfb6961ad2a611164eec69c6b20 Mon Sep 17 00:00:00 2001 From: travislgd Date: Thu, 7 Aug 2025 14:23:10 +0800 Subject: [PATCH 076/109] displayani fix Signed-off-by: travislgd --- .../display_ani/include/display_ani_utils.h | 2 ++ .../display_ani/src/display_ani.cpp | 4 ++-- .../display_ani/src/display_ani_listener.cpp | 12 ++++++---- .../display_ani/src/display_ani_utils.cpp | 23 +++++++++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h index aefa5bb444..1c4a9006b7 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h @@ -55,6 +55,8 @@ static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, const char* fn, const char* signature, ...); + +static ani_object CreateRectObject(ani_env *env); }; } } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 9d554f6edd..e0593ec8b4 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -86,8 +86,7 @@ void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object avail DmErrorCode ret = DM_JS_TO_ERROR_CODE_MAP.at(display->GetAvailableArea(area)); if (ret != DmErrorCode::DM_OK) { TLOGE(WmsLogTag::DMS, "[ANI] Display get available area failed."); - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, - "JsDisplay::GetAvailableArea failed."); + AniErrUtils::ThrowBusinessError(env, ret, "JsDisplay::GetAvailableArea failed."); return; } DisplayAniUtils::ConvertRect(area, availableAreaObj, env); @@ -190,6 +189,7 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ return; } displayAniListener->AddCallback(typeString, cbRef); + displayAniListener->SetMainEventHandler(); jsCbMap_[typeString][callback] = displayAniListener; } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index fab8a8356b..e21fd0cf14 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -414,10 +414,14 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) if (env_ != nullptr) { auto it = aniCallback_.find(EVENT_AVAILABLE_AREA_CHANGED); for (auto oneAniCallback : it->second) { - ani_object rectObj = nullptr; - DisplayAniUtils::ConvertRect(area, rectObj, env_); - auto task = [env = env_, oneAniCallback, rectObj] () { - DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "availableAreaChangedCallback", + auto task = [env = env_, oneAniCallback, area] () { + ani_object rectObj = DisplayAniUtils::CreateRectObject(env); + if (!rectObj) { + TLOGE(WmsLogTag::DMS, "[ANI] CreateRectObject failed"); + return; + } + DisplayAniUtils::ConvertRect(area, rectObj, env); + DisplayAniUtils::CallAniFunctionVoid(env, "L@ohos/display/display;", "availableAreaChangedCallback", nullptr, oneAniCallback, rectObj); }; if (!eventHandler_) { diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 0f8990e83b..c1d5d9d847 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -255,5 +255,28 @@ ani_status DisplayAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, return ret; } +ani_object DisplayAniUtils::CreateRectObject(ani_env *env) +{ + ani_class aniClass{}; + ani_status status = env->FindClass("L@ohos/display/display/RectImpl;", &aniClass); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); + return nullptr; + } + ani_method aniCtor; + auto ret = env->Class_FindMethod(aniClass, "", ":V", &aniCtor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] Class_FindMethod failed"); + return nullptr; + } + ani_object rectObj; + status = env->Object_New(aniClass, aniCtor, &rectObj); + if (status != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] NewAniObject failed"); + return nullptr; + } + return rectObj; +} + } } -- Gitee From 34eb1c9e760ebe13c9d99af266b73a1d4b7ff59d Mon Sep 17 00:00:00 2001 From: chenpeng Date: Thu, 7 Aug 2025 22:47:18 +0800 Subject: [PATCH 077/109] DMS number to int long double Signed-off-by: chenpeng --- .../display_ani/ets/@ohos.display.ets | 80 +++++++++---------- .../display_ani/ets/display_entry.ets | 25 ------ .../display_ani/include/display_ani_manager.h | 4 +- .../display_ani/src/display_ani.cpp | 14 ++-- .../display_ani/src/display_ani_manager.cpp | 16 ++-- .../display_ani/src/display_ani_utils.cpp | 28 +++---- .../screen_ani/ets/@ohos.screen.ets | 68 ++++++++-------- .../screen_ani/include/screen_ani_manager.h | 2 +- .../screen_ani/src/screen_ani_listener.cpp | 6 +- .../screen_ani/src/screen_ani_manager.cpp | 18 ++--- .../screen_ani/src/screen_ani_utils.cpp | 16 ++-- .../screenshot_ani/ets/@ohos.screenshot.ets | 36 ++++----- .../src/screenshot_ani_utils.cpp | 32 ++++---- 13 files changed, 157 insertions(+), 188 deletions(-) delete mode 100644 interfaces/kits/ani/display_runtime/display_ani/ets/display_entry.ets diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 4f99569c2f..7734d76a20 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -16,10 +16,6 @@ import type { AsyncCallback, Callback} from '@ohos.base'; import { BusinessError } from '@ohos.base'; import colorSpaceManager from '@ohos.graphics.colorSpaceManager'; import hdrCapability from '@ohos.graphics.hdrCapability'; -import hilog from '@ohos.hilog'; - -const DOMAIN = 0x4201; -const TAG = '[ANI]'; export default namespace display { @@ -29,23 +25,23 @@ const DISPLAY_ARRAY_LENGTH = 15; const CUTO_ARRAY_LENGTH = 5; export interface Rect { - left: number; + left: long; - top: number; + top: long; - width: number; + width: long; - height: number; + height: long; } export class RectImpl implements Rect { - left: number; + left: long; - top: number; + top: long; - width: number; + width: long; - height: number; + height: long; } interface WaterfallDisplayAreaRects { @@ -95,7 +91,7 @@ export class CutoutInfoImpl implements CutoutInfo { } export interface FoldCreaseRegion { - readonly displayId: number; + readonly displayId: long; readonly creaseRects: Array; } @@ -108,7 +104,7 @@ export class FoldCreaseRegionImpl implements FoldCreaseRegion { } } - readonly displayId: number; + readonly displayId: long; readonly creaseRects: Array; } @@ -162,7 +158,7 @@ enum DisplayState { } export interface Display { - id: double; + id: long; name: string; @@ -170,17 +166,17 @@ export interface Display { state: DisplayState; - refreshRate: double; + refreshRate: int; - rotation: double; + rotation: int; - width: double; + width: long; - height: double; + height: long; - availableHeight: double; + availableHeight: long; - availableWidth: double; + availableWidth: long; densityDPI: double; @@ -221,7 +217,7 @@ export class DisplayImpl implements Display { this.hdrFormats = new Array(); } - id: double; + id: long; name: string; @@ -230,17 +226,17 @@ export class DisplayImpl implements Display { state: DisplayState; state_: int; - refreshRate: double; + refreshRate: int; - rotation: double; + rotation: int; - width: double; + width: long; - height: double; + height: long; - availableHeight: double; + availableHeight: long; - availableWidth: double; + availableWidth: long; densityDPI: double; @@ -297,7 +293,7 @@ export class DisplayImpl implements Display { taskpool.execute((): boolean => { return this.hasImmersiveWindowInternal(); }).then((ret: NullishType) => { - callback(new BusinessError(), ret as boolean); + callback(null, ret as boolean); }).catch((err: NullishType) => { callback(err as BusinessError, false); }); @@ -395,7 +391,7 @@ function minusCreaseRects(foldCreaseRegionObj: FoldCreaseRegion): void { export native function getCurrentFoldCreaseRegionNative(foldCreaseRegion: object, nativeObj: long): void; // display sync interfaces -export function getDisplayByIdSync(displayId: number): Display { +export function getDisplayByIdSync(displayId: long): Display { let display = new DisplayImpl(); getDisplayByIdSyncNative(display as object, displayId); display.state = display.state_ as DisplayState; @@ -403,7 +399,7 @@ export function getDisplayByIdSync(displayId: number): Display { return display; } -export native function getDisplayByIdSyncNative(obj: object, displayId: number): void; +export native function getDisplayByIdSyncNative(obj: object, displayId: long): void; export function getDefaultDisplaySync(): Display { let display = new DisplayImpl(); @@ -418,7 +414,6 @@ export native function getDefaultDisplaySyncNative(obj: object): void; export native function getAllDisplaysSyncNative(displayArray: Array): void; export function getAllDisplays(callback: AsyncCallback>): void { - hilog.info(DOMAIN, TAG, 'get all display from ani'); let res: Array = new Array(DISPLAY_ARRAY_LENGTH); for (let i = 0; i < res.length; i++) { res[i] = new DisplayImpl(); @@ -428,7 +423,6 @@ export function getAllDisplays(callback: AsyncCallback>): void { minusDisplayArray(res); callback(null, res); } catch (err: BusinessError) { - hilog.error(DOMAIN, TAG, 'get all display from err'); callback(err, res); } return; @@ -480,9 +474,9 @@ export function off(type: string, callback?: Callback): void { export native function syncOff(type: string, nativeObj: long, callback?: object) : void; -export function displayEventCallBack(cb: object, cbArg: double): void { - const func = cb as (cbArg: double) => void; - func(cbArg as double); +export function displayEventCallBack(cb: object, cbArg: long): void { + const func = cb as (cbArg: long) => void; + func(cbArg as long); } export function foldStatusCallback(cb: object, cbArg: int): void { @@ -496,8 +490,8 @@ export function foldDisplayModeCallback(cb: object, cbArg: int): void { } export function foldAngleChangeCallback(cb: object, cbArg: object): void { - const func = cb as (cbArg: Array) => void; - func(cbArg as Array); + const func = cb as (cbArg: Array) => void; + func(cbArg as Array); } export function captureStatusChangedCallback(cb: object, cbArg: boolean): void { @@ -510,7 +504,7 @@ export function availableAreaChangedCallback(cb: object, cbArg: object): void { func(cbArg as Rect); } -export native function hasPrivateWindow(displayId: number): boolean; +export native function hasPrivateWindow(displayId: long): boolean; export function getAllDisplayPhysicalResolution(): Promise> { return new Promise>((resolve: (value: Array) => void, @@ -548,18 +542,18 @@ export native function getAllDisplayPhysicalResolutionNative(PhysicalResolutions export interface DisplayPhysicalResolution { foldDisplayMode: FoldDisplayMode; - physicalWidth: number; + physicalWidth: long; - physicalHeight: number; + physicalHeight: long; } export class DisplayPhysicalResolutionImpl implements DisplayPhysicalResolution{ foldDisplayMode: FoldDisplayMode; foldDisplayMode_: int; - physicalWidth: number; + physicalWidth: long; - physicalHeight: number; + physicalHeight: long; } export let displayMgrRef: long; diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/display_entry.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/display_entry.ets deleted file mode 100644 index 600a4d73bd..0000000000 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/display_entry.ets +++ /dev/null @@ -1,25 +0,0 @@ -import display from '@ohos.display' - -loadLibrary('displayani_kit.z'); - -function main() { - let isFoldable = display.isFoldable(); - console.log('[ANI] isfoldable test, result = ' + isFoldable); - display.getFoldDisplayMode(); - let disret : display.Display = display.getDefaultDisplaySync(); - let cbk = (i : number): void => { - console.log('[ANI] isfoldable test, result = ' + i); - } - display.on('add', cbk); - display.getDisplayByIdSync(0); - let asyncCbk = (err: display.BusinessError, arr : Array):void => { - console.log('AsyncCallBack'); - } - display.getAllDisplays(asyncCbk); - display.getCurrentFoldCreaseRegion(); - let dis : display.Display = new display.DisplayImpl(); - let asyncbk = (err: display.BusinessError, arr : display.CutoutInfo):void => { - console.log('AsyncCallBack'); - } - dis.getCutoutInfo(asyncbk); -} \ No newline at end of file diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h index 42f4e67212..028a053243 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h @@ -34,7 +34,7 @@ public: static void GetCurrentFoldCreaseRegion(ani_env* env, ani_object obj, ani_long nativeObj); static void GetAllDisplaysAni(ani_env* env, ani_object arrayObj); - static void GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId); + static void GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_long displayId); static void GetDefaultDisplaySyncAni(ani_env* env, ani_object obj); static void RegisterCallback(ani_env* env, ani_string type, @@ -45,7 +45,7 @@ public: DMError UnregisterAllDisplayListenerWithType(std::string type); DmErrorCode ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr displayAniListener); - static ani_boolean HasPrivateWindow(ani_env* env, ani_double displayId); + static ani_boolean HasPrivateWindow(ani_env* env, ani_long displayId); static void GetAllDisplayPhysicalResolution(ani_env* env, ani_object arrayObj, ani_long nativeObj); private: void OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 9d554f6edd..931b718440 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -50,8 +50,8 @@ void DisplayAni::GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutIn if (ANI_OK != status) { TLOGE(WmsLogTag::DMS, "[ANI] get field bounding rects fail, ani_status = %{public}d", status); } - ani_double length; - if (ANI_OK != env->Object_GetPropertyByName_Double(static_cast(boundingRects), "length", &length)) { + ani_int length; + if (ANI_OK != env->Object_GetPropertyByName_Int(static_cast(boundingRects), "length", &length)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array len fail"); } for (int i = 0; i < std::min(int(length), static_cast(rects.size())); i++) { @@ -73,8 +73,8 @@ void DisplayAni::GetCutoutInfo(ani_env* env, ani_object obj, ani_object cutoutIn void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object availableAreaObj) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); - ani_double id; - env->Object_GetFieldByName_Double(obj, "id", &id); + ani_long id; + env->Object_GetFieldByName_Long(obj, "id", &id); auto display = SingletonContainer::Get().GetDisplayById(id); if (display == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] can not find display."); @@ -96,8 +96,8 @@ void DisplayAni::GetAvailableArea(ani_env* env, ani_object obj, ani_object avail ani_boolean DisplayAni::HasImmersiveWindow(ani_env* env, ani_object obj) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); - ani_double id; - env->Object_GetFieldByName_Double(obj, "id", &id); + ani_long id; + env->Object_GetFieldByName_Long(obj, "id", &id); auto display = SingletonContainer::Get().GetDisplayById(id); if (display == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI]can not find display."); @@ -332,7 +332,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"getFoldStatusNative", ":i", reinterpret_cast(DisplayManagerAni::GetFoldStatus)}, ani_native_function {"getCurrentFoldCreaseRegionNative", "C{std.core.Object}l:", reinterpret_cast(DisplayManagerAni::GetCurrentFoldCreaseRegion)}, - ani_native_function {"getDisplayByIdSyncNative", "C{std.core.Object}d:", + ani_native_function {"getDisplayByIdSyncNative", "C{std.core.Object}l:", reinterpret_cast(DisplayManagerAni::GetDisplayByIdSyncAni)}, ani_native_function {"getDefaultDisplaySyncNative", "C{std.core.Object}:", reinterpret_cast(DisplayManagerAni::GetDefaultDisplaySyncAni)}, diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index 7272b6af27..be31e88764 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -106,15 +106,15 @@ void DisplayManagerAni::OnGetCurrentFoldCreaseRegion(ani_env* env, ani_object ob return; } TLOGI(WmsLogTag::DMS, "[ANI] DisplayManager GetCurrentFoldCreaseRegion success %{public}d", (int)displayId); - if (ANI_OK != env->Object_SetFieldByName_Double(obj, "displayId", (ani_double)displayId)) { + if (ANI_OK != env->Object_SetFieldByName_Long(obj, "displayId", (ani_long)displayId)) { TLOGE(WmsLogTag::DMS, "[ANI] set displayId field fail"); } ani_ref creaseRectsObj{}; if (ANI_OK != env->Object_GetFieldByName_Ref(obj, "creaseRects", &creaseRectsObj)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array len fail"); } - ani_double length; - if (ANI_OK != env->Object_GetPropertyByName_Double(static_cast(creaseRectsObj), "length", &length)) { + ani_int length; + if (ANI_OK != env->Object_GetPropertyByName_Int(static_cast(creaseRectsObj), "length", &length)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array len fail"); } TLOGI(WmsLogTag::DMS, "[ANI] set CurrentFoldCreaseRegion property begin"); @@ -136,8 +136,8 @@ void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) if (displays.empty()) { AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); } - ani_double length; - if (ANI_OK != env->Object_GetPropertyByName_Double(arrayObj, "length", &length)) { + ani_int length; + if (ANI_OK != env->Object_GetPropertyByName_Int(arrayObj, "length", &length)) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array len fail"); } @@ -154,9 +154,9 @@ void DisplayManagerAni::GetAllDisplaysAni(ani_env* env, ani_object arrayObj) TLOGI(WmsLogTag::DMS, "[ANI] GetAllDisplaysAni end"); } -void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_double displayId) +void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_long displayId) { - TLOGE(WmsLogTag::DMS, "[ANI] begin"); + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (displayId < 0) { TLOGE(WmsLogTag::DMS, "[ANI] Invalid displayId, less than 0"); return; @@ -422,7 +422,7 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type return ret; } -ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_double displayId) +ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_long displayId) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); bool hasPrivateWindow = false; diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index 0f8990e83b..386bbf1488 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -54,10 +54,10 @@ void DisplayAniUtils::ConvertRect(DMRect rect, ani_object rectObj, ani_env* env) { TLOGI(WmsLogTag::DMS, "[ANI] rect area info: %{public}d, %{public}d, %{public}u, %{public}u", rect.posX_, rect.posY_, rect.width_, rect.height_); - env->Object_SetFieldByName_Double(rectObj, "left", rect.posX_); - env->Object_SetFieldByName_Double(rectObj, "width", rect.width_); - env->Object_SetFieldByName_Double(rectObj, "top", rect.posY_); - env->Object_SetFieldByName_Double(rectObj, "height", rect.height_); + env->Object_SetFieldByName_Long(rectObj, "left", rect.posX_); + env->Object_SetFieldByName_Long(rectObj, "width", rect.width_); + env->Object_SetFieldByName_Long(rectObj, "top", rect.posY_); + env->Object_SetFieldByName_Long(rectObj, "height", rect.height_); } void DisplayAniUtils::ConvertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects, @@ -81,17 +81,17 @@ void DisplayAniUtils::ConvertWaterArea(WaterfallDisplayAreaRects waterfallDispla void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vector& displayPhysicalArray, ani_object arrayObj, ani_env *env) { - ani_double arrayObjLen; - env->Object_GetPropertyByName_Double(arrayObj, "length", &arrayObjLen); + ani_int arrayObjLen; + env->Object_GetPropertyByName_Int(arrayObj, "length", &arrayObjLen); for (uint32_t i = 0; i < displayPhysicalArray.size() && i < static_cast(arrayObjLen); i++) { ani_ref obj; env->Object_CallMethodByName_Ref(arrayObj, "$_get", "i:C{std.core.Object}", &obj, (ani_int)i); env->Object_SetFieldByName_Int(static_cast(obj), "foldDisplayMode_", static_cast(displayPhysicalArray[i].foldDisplayMode_)); - env->Object_SetFieldByName_Double(static_cast(obj), "physicalWidth", + env->Object_SetFieldByName_Long(static_cast(obj), "physicalWidth", displayPhysicalArray[i].physicalWidth_); - env->Object_SetFieldByName_Double(static_cast(obj), "physicalHeight", + env->Object_SetFieldByName_Long(static_cast(obj), "physicalHeight", displayPhysicalArray[i].physicalHeight_); } } @@ -99,7 +99,7 @@ void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vector display, ani_env* env, ani_object obj) { sptr info = display->GetDisplayInfoWithCache(); - int setfieldid = env->Object_SetFieldByName_Double(obj, "id", info->GetDisplayId()); + int setfieldid = env->Object_SetFieldByName_Long(obj, "id", info->GetDisplayId()); if (ANI_OK != setfieldid) { TLOGE(WmsLogTag::DMS, "[ANI] set id failed: %{public}d", setfieldid); } @@ -115,16 +115,16 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ } else { env->Object_SetFieldByName_Int(obj, "state_", 0); } - env->Object_SetFieldByName_Double(obj, "refreshRate", info->GetRefreshRate()); - env->Object_SetFieldByName_Double(obj, "rotation", static_cast(info->GetRotation())); + env->Object_SetFieldByName_Int(obj, "refreshRate", info->GetRefreshRate()); + env->Object_SetFieldByName_Int(obj, "rotation", static_cast(info->GetRotation())); ani_status setfieldRes = env->Object_SetFieldByName_Double(obj, "width", static_cast(info->GetWidth())); if (ANI_OK != setfieldRes) { TLOGE(WmsLogTag::DMS, "[ANI] set failed: %{public}d, %{public}u", info->GetWidth(), setfieldRes); } - env->Object_SetFieldByName_Double(obj, "height", display->GetHeight()); - env->Object_SetFieldByName_Double(obj, "availableWidth", info->GetAvailableWidth()); - env->Object_SetFieldByName_Double(obj, "availableHeight", info->GetAvailableHeight()); + env->Object_SetFieldByName_Long(obj, "height", display->GetHeight()); + env->Object_SetFieldByName_Long(obj, "availableWidth", info->GetAvailableWidth()); + env->Object_SetFieldByName_Long(obj, "availableHeight", info->GetAvailableHeight()); env->Object_SetFieldByName_Double(obj, "densityDPI", info->GetVirtualPixelRatio() * DOT_PER_INCH); env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetDisplayOrientation())); env->Object_SetFieldByName_Double(obj, "densityPixels", info->GetVirtualPixelRatio()); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index 374ae6e506..e5518b40a1 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -30,31 +30,31 @@ export function off(eventType: string, callback?: Callback): void{ } native function syncOff(eventType: string, nativeObj: long, callback?: object): void; -export function makeMirror(mainScreen: number, mirrorScreen: Array, callback: AsyncCallback): void { - taskpool.execute((): number => { - let res: number = makeMirrorInternal(mainScreen, mirrorScreen); +export function makeMirror(mainScreen: long, mirrorScreen: Array, callback: AsyncCallback): void { + taskpool.execute((): long => { + let res: long = makeMirrorInternal(mainScreen, mirrorScreen); return res; }).then((ret: NullishType) => { - callback(new BusinessError(), ret as number); + callback(null, ret as long); }).catch((err: NullishType) => { callback(err as BusinessError, -1); }); } -export function makeMirror(mainScreen: number, mirrorScreen: Array): Promise { - return new Promise((resolve: (value: number) => void, reject: (error: BusinessError) => void ) => { - taskpool.execute((): number => { - let res: number = makeMirrorInternal(mainScreen, mirrorScreen); +export function makeMirror(mainScreen: long, mirrorScreen: Array): Promise { + return new Promise((resolve: (value: long) => void, reject: (error: BusinessError) => void ) => { + taskpool.execute((): long => { + let res: long = makeMirrorInternal(mainScreen, mirrorScreen); return res; }).then((ret: NullishType) => { - resolve(ret as number); + resolve(ret as long); }).catch((err: NullishType) => { reject(err as BusinessError); }); }) } -export native function makeMirrorInternal(mainScreen: number, mirrorScreen: Array): number; +export native function makeMirrorInternal(mainScreen: long, mirrorScreen: Array): long; export function getAllScreens(callback: AsyncCallback>): void { taskpool.execute((): Array => { @@ -66,7 +66,7 @@ export function getAllScreens(callback: AsyncCallback>): void { minusScreens(screens); return screens; }).then((ret: NullishType) => { - callback(new BusinessError(), ret as Array); + callback(null, ret as Array); }).catch((err: NullishType) => { callback(err as BusinessError, new Array()); }); @@ -121,21 +121,21 @@ export native function getAllScreensInternal(screens: Array): void; export interface Screen { - readonly id: number; + readonly id: long; - readonly parent: number; + readonly parent: long; readonly supportedModeInfo: Array; - readonly activeModeIndex: number; + readonly activeModeIndex: long; readonly orientation: Orientation; readonly sourceMode: ScreenSourceMode; - setDensityDpi(densityDpi: number, callback: AsyncCallback): void; + setDensityDpi(densityDpi: double, callback: AsyncCallback): void; - setDensityDpi(densityDpi: number): Promise; + setDensityDpi(densityDpi: double): Promise; } class ScreenImpl implements Screen { @@ -160,14 +160,14 @@ class ScreenImpl implements Screen { this.screenNativeObj = screen.screenNativeObj; } - readonly id: number; + readonly id: long; - readonly parent: number; + readonly parent: long; readonly supportedModeInfo: Array; supportedModeInfo_: Array; - readonly activeModeIndex: number; + readonly activeModeIndex: long; readonly orientation: Orientation; orientation_: int; @@ -178,17 +178,17 @@ class ScreenImpl implements Screen { screenNativeObj: long; - setDensityDpi(densityDpi: number, callback: AsyncCallback): void { + setDensityDpi(densityDpi: double, callback: AsyncCallback): void { taskpool.execute((): void => { this.setDensityDpiInternal(densityDpi); }).then(() => { - callback(new BusinessError(), undefined); + callback(null, undefined); }).catch((err: NullishType) => { callback(err as BusinessError, undefined); }); } - setDensityDpi(densityDpi: number): Promise { + setDensityDpi(densityDpi: double): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void ): void => { taskpool.execute((): void => { this.setDensityDpiInternal(densityDpi); @@ -200,27 +200,27 @@ class ScreenImpl implements Screen { }); } - native setDensityDpiInternal(densityDpi: number): void; + native setDensityDpiInternal(densityDpi: double): void; } export interface ScreenModeInfo { - id: number; + id: long; - width: number; + width: long; - height: number; + height: long; - refreshRate: number; + refreshRate: int; } class ScreenModeInfoImpl implements ScreenModeInfo{ - id: number; + id: long; - width: number; + width: long; - height: number; + height: long; - refreshRate: number; + refreshRate: int; } export enum ScreenSourceMode { @@ -250,8 +250,8 @@ export function setScreenMgrRef(nativeObj: long): void{ screenMgrRef = nativeObj; } -export function screenEventCallBack(cb: object, cbArg: double): void { - const func = cb as (cbArg: double) => void; - func(cbArg as double); +export function screenEventCallBack(cb: object, cbArg: long): void { + const func = cb as (cbArg: long) => void; + func(cbArg as long); } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h index 4606502229..f8a39bf271 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h @@ -36,7 +36,7 @@ public: static ani_status InitScreenManagerAni(ani_namespace screenNameSpace, ani_env* env); DmErrorCode ProcessRegisterCallback(ani_env* env, std::string& typeStr, sptr screenAniListener); - static ani_double MakeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen); + static ani_long MakeMirror(ani_env* env, ani_long mainScreen, ani_object mirrorScreen); static void GetAllScreens(ani_env* env, ani_object screensAni); private: void OnRegisterCallback(ani_env* env, ani_string type, ani_ref callback); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index 2c5aaa60f4..e87cff198c 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -107,7 +107,7 @@ void ScreenAniListener::OnConnect(ScreenId id) auto task = [env = env_, oneAniCallback, id] { ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", - "C{std.core.Object}d:", oneAniCallback, static_cast(id)); + "C{std.core.Object}l:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); @@ -154,7 +154,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) auto task = [env = env_, oneAniCallback, id] { ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", - "C{std.core.Object}d:", oneAniCallback, static_cast(id)); + "C{std.core.Object}l:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "[ANI] get main event handler failed!"); @@ -199,7 +199,7 @@ void ScreenAniListener::OnChange(ScreenId id) } auto task = [env = env_, oneAniCallback, id] () { ScreenAniUtils::CallAniFunctionVoid(env, "@ohos.screen.screen", "screenEventCallBack", - "C{std.core.Object}d:", oneAniCallback, static_cast(id)); + "C{std.core.Object}l:", oneAniCallback, static_cast(id)); }; if (!eventHandler_) { TLOGE(WmsLogTag::DMS, "get main event handler failed!"); diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 9b8254b0b4..004f048b09 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -215,11 +215,11 @@ DMError ScreenManagerAni::UnRegisterAllScreenListenerWithType(std::string type) return ret; } -ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani_object mirrorScreen) +ani_long ScreenManagerAni::MakeMirror(ani_env* env, ani_long mainScreen, ani_object mirrorScreen) { - ani_double length = 0; + ani_int length = 0; std::vector screenIds; - env->Object_GetPropertyByName_Double(mirrorScreen, "length", &length); + env->Object_GetPropertyByName_Int(mirrorScreen, "length", &length); TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); for (uint32_t i = 0; i < length; i++) { ani_ref screenIdRef; @@ -228,14 +228,14 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] get ani_array index %{public}u fail, ret: %{public}u", (ani_int)i, ret); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to get screenId"); - return static_cast(INVALID_SCREEN_ID); + return static_cast(INVALID_SCREEN_ID); } - ani_double screenId; - ret = env->Object_CallMethodByName_Double(static_cast(screenIdRef), "unboxed", ":d", &screenId); + ani_long screenId; + ret = env->Object_CallMethodByName_Long(static_cast(screenIdRef), "unboxed", ":J", &screenId); if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] unboxed screenId failed, ret: %{public}u", ret); AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Failed to unboxed screenId"); - return static_cast(INVALID_SCREEN_ID); + return static_cast(INVALID_SCREEN_ID); } screenIds.emplace_back(static_cast(screenId)); } @@ -245,9 +245,9 @@ ani_double ScreenManagerAni::MakeMirror(ani_env* env, ani_double mainScreen, ani screenIds, screenGroupId)); if (ret != DmErrorCode::DM_OK) { AniErrUtils::ThrowBusinessError(env, ret, "JsScreenManager::OnMakeMirror failed."); - return static_cast(INVALID_SCREEN_ID); + return static_cast(INVALID_SCREEN_ID); } - return static_cast(screenGroupId); + return static_cast(screenGroupId); } ani_status ScreenManagerAni::InitScreenManagerAni(ani_namespace screenNameSpace, ani_env* env) diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index 1464ade863..7ffa818d1f 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -63,10 +63,10 @@ ani_status ScreenAniUtils::ConvertScreen(ani_env *env, sptr screen, ani_ { sptr info = screen->GetScreenInfo(); TLOGI(WmsLogTag::DMS, "[ANI] convert screen id %{public}u", static_cast(info->GetScreenId())); - env->Object_SetFieldByName_Double(obj, "id", static_cast(info->GetScreenId())); - env->Object_SetFieldByName_Double(obj, "parent", static_cast(info->GetParentId())); - env->Object_SetFieldByName_Double(obj, "activeModeIndex", - static_cast(info->GetModeId())); + env->Object_SetFieldByName_Long(obj, "id", static_cast(info->GetScreenId())); + env->Object_SetFieldByName_Long(obj, "parent", static_cast(info->GetParentId())); + env->Object_SetFieldByName_Long(obj, "activeModeIndex", + static_cast(info->GetModeId())); env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetOrientation())); env->Object_SetFieldByName_Int(obj, "sourceMode_", static_cast(info->GetSourceMode())); std::unique_ptr screenAni = std::make_unique(screen); @@ -131,10 +131,10 @@ ani_object ScreenAniUtils::NewNativeObject(ani_env* env, const std::string& objN void ScreenAniUtils::ConvertScreenMode(ani_env* env, sptr mode, ani_object obj) { - env->Object_SetFieldByName_Double(obj, "id", static_cast(mode->id_)); - env->Object_SetFieldByName_Double(obj, "width", static_cast(mode->width_)); - env->Object_SetFieldByName_Double(obj, "height", static_cast(mode->height_)); - env->Object_SetFieldByName_Double(obj, "refreshRate", static_cast(mode->refreshRate_)); + env->Object_SetFieldByName_Long(obj, "id", static_cast(mode->id_)); + env->Object_SetFieldByName_Long(obj, "width", static_cast(mode->width_)); + env->Object_SetFieldByName_Long(obj, "height", static_cast(mode->height_)); + env->Object_SetFieldByName_Int(obj, "refreshRate", static_cast(mode->refreshRate_)); } ani_status ScreenAniUtils::ConvertScreens(ani_env *env, std::vector> screens, ani_object& screensAni) diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets index 03b0ff4534..5178f2a2e6 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -26,7 +26,7 @@ export function save(options: ScreenshotOptions, callback: AsyncCallback { - callback(new BusinessError(), ret as image.PixelMap); + callback(null, ret as image.PixelMap); }).catch((err: NullishType) => { callback(err as BusinessError, undefined); }); @@ -37,7 +37,7 @@ export function save(callback: AsyncCallback): void let res: image.PixelMap = saveSync(); return res; }).then((ret: NullishType) => { - callback(new BusinessError(), ret as image.PixelMap); + callback(null, ret as image.PixelMap); }).catch((err: NullishType) => { callback(err as BusinessError, undefined); }); @@ -63,9 +63,9 @@ export interface ScreenshotOptions { imageSize: Size; - rotation: number; + rotation: int; - displayId: number; + displayId: long; isNotificationNeeded: boolean; @@ -77,9 +77,9 @@ export class ScreenshotOptionsImpl implements ScreenshotOptions{ imageSize: Size; - rotation: number; + rotation: int; - displayId: number; + displayId: long; isNotificationNeeded: boolean; @@ -87,35 +87,35 @@ export class ScreenshotOptionsImpl implements ScreenshotOptions{ } export interface Size { - width: number; + width: long; - height: number; + height: long; } export class SizeImpl implements Size { - width: number; + width: long; - height: number; + height: long; } export interface Rect { - left: number; + left: long; - top: number; + top: long; - width: number; + width: long; - height: number; + height: long; } export class RectImpl implements Rect { - left: number; + left: long; - top: number; + top: long; - width: number; + width: long; - height: number; + height: long; } } \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp index 6e6eeb9614..034dd1332e 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -96,11 +96,11 @@ void ScreenshotAniUtils::GetScreenshotParam(ani_env *env, std::unique_ptr TLOGI(WmsLogTag::DMS, "[ANI] null param"); return; } - ani_double displayId = 0; - env->Object_GetPropertyByName_Double(options, "displayId", &displayId); + ani_long displayId = 0; + env->Object_GetPropertyByName_Long(options, "displayId", &displayId); param->option.displayId = static_cast(displayId); - ani_double rotation = 0; - env->Object_GetPropertyByName_Double(options, "rotation", &rotation); + ani_int rotation = 0; + env->Object_GetPropertyByName_Int(options, "rotation", &rotation); param->option.rotation = static_cast(rotation); ani_boolean isNeedNotify = true; env->Object_GetPropertyByName_Boolean(options, "isNotificationNeeded", &isNeedNotify); @@ -116,10 +116,10 @@ void ScreenshotAniUtils::GetScreenshotSize(ani_env *env, std::unique_ptr { ani_ref obj; env->Object_GetPropertyByName_Ref(options, "imageSize", &obj); - ani_double width; - ani_double height; - env->Object_GetPropertyByName_Double(static_cast(obj), "width", &width); - env->Object_GetPropertyByName_Double(static_cast(obj), "height", &height); + ani_long width; + ani_long height; + env->Object_GetPropertyByName_Long(static_cast(obj), "width", &width); + env->Object_GetPropertyByName_Long(static_cast(obj), "height", &height); param->option.size.width = static_cast(width); param->option.size.height = static_cast(height); TLOGI(WmsLogTag::DMS, "[ANI] get imageSize width = %{public}d, height = %{public}d", @@ -130,14 +130,14 @@ void ScreenshotAniUtils::GetScreenshotRect(ani_env *env, std::unique_ptr { ani_ref obj; env->Object_GetPropertyByName_Ref(options, "screenRect", &obj); - ani_double left = 0; - ani_double top = 0; - ani_double width = 0; - ani_double height = 0; - env->Object_GetPropertyByName_Double(static_cast(obj), "left", &left); - env->Object_GetPropertyByName_Double(static_cast(obj), "top", &top); - env->Object_GetPropertyByName_Double(static_cast(obj), "width", &width); - env->Object_GetPropertyByName_Double(static_cast(obj), "height", &height); + ani_long left = 0; + ani_long top = 0; + ani_long width = 0; + ani_long height = 0; + env->Object_GetPropertyByName_Long(static_cast(obj), "left", &left); + env->Object_GetPropertyByName_Long(static_cast(obj), "top", &top); + env->Object_GetPropertyByName_Long(static_cast(obj), "width", &width); + env->Object_GetPropertyByName_Long(static_cast(obj), "height", &height); param->option.rect.left = static_cast(left); param->option.rect.top = static_cast(top); param->option.rect.width = static_cast(width); -- Gitee From cf8da31d41f239ec2554df06549bd9bf7f5ca99d Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Tue, 12 Aug 2025 12:06:35 +0000 Subject: [PATCH 078/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../include/ani_window_listener.h | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h index 00b93821c5..1f460261af 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_listener.h @@ -29,33 +29,6 @@ namespace OHOS { namespace Rosen { -const std::string WINDOW_SIZE_CHANGE_CB = "windowSizeChange"; -const std::string SYSTEM_BAR_TINT_CHANGE_CB = "systemBarTintChange"; -const std::string SYSTEM_AVOID_AREA_CHANGE_CB = "systemAvoidAreaChange"; -const std::string AVOID_AREA_CHANGE_CB = "avoidAreaChange"; -const std::string LIFECYCLE_EVENT_CB = "lifeCycleEvent"; -const std::string WINDOW_STAGE_EVENT_CB = "windowStageEvent"; -const std::string WINDOW_EVENT_CB = "windowEvent"; -const std::string KEYBOARD_HEIGHT_CHANGE_CB = "keyboardHeightChange"; -const std::string KEYBOARD_DID_SHOW_CB = "keyboardDidShow"; -const std::string KEYBOARD_DID_HIDE_CB = "keyboardDidHide"; -const std::string TOUCH_OUTSIDE_CB = "touchOutside"; -const std::string SCREENSHOT_EVENT_CB = "screenshot"; -const std::string DIALOG_TARGET_TOUCH_CB = "dialogTargetTouch"; -const std::string DIALOG_DEATH_RECIPIENT_CB = "dialogDeathRecipient"; -const std::string GESTURE_NAVIGATION_ENABLED_CHANGE_CB = "gestureNavigationEnabledChange"; -const std::string WATER_MARK_FLAG_CHANGE_CB = "waterMarkFlagChange"; -const std::string WINDOW_VISIBILITY_CHANGE_CB = "windowVisibilityChange"; -const std::string WINDOW_STATUS_CHANGE_CB = "windowStatusChange"; -const std::string WINDOW_TITLE_BUTTON_RECT_CHANGE_CB = "windowTitleButtonRectChange"; -const std::string WINDOW_NO_INTERACTION_DETECT_CB = "noInteractionDetected"; -const std::string WINDOW_RECT_CHANGE_CB = "windowRectChange"; -const std::string SUB_WINDOW_CLOSE_CB = "subWindowClose"; -const std::string WINDOW_HIGHLIGHT_CHANGE_CB = "windowHighlightChange"; -const std::string WINDOW_STAGE_CLOSE_CB = "windowStageClose"; -const std::string SYSTEM_DENSITY_CHANGE_CB = "systemDensityChange"; -const std::string WINDOW_DISPLAYID_CHANGE_CB = "displayIdChange"; -const std::string WINDOW_ROTATION_CHANGE_CB = "rotationChange"; class AniWindowListener : public IWindowChangeListener, public ISystemBarChangedListener, -- Gitee From c715105dd57bd8da614566c26304d9a4fdf01d8f Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Tue, 12 Aug 2025 12:07:35 +0000 Subject: [PATCH 079/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../include/ani_window_register_manager.h | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h index fba67d90b7..33090b5584 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_register_manager.h @@ -24,36 +24,6 @@ namespace OHOS { namespace Rosen { -enum class RegisterListenerType : uint32_t { - SYSTEM_BAR_TINT_CHANGE_CB, - GESTURE_NAVIGATION_ENABLED_CHANGE_CB, - WATER_MARK_FLAG_CHANGE_CB, - WINDOW_SIZE_CHANGE_CB, - SYSTEM_AVOID_AREA_CHANGE_CB, - AVOID_AREA_CHANGE_CB, - LIFECYCLE_EVENT_CB, - WINDOW_EVENT_CB, - KEYBOARD_HEIGHT_CHANGE_CB, - KEYBOARD_DID_SHOW_CB, - KEYBOARD_DID_HIDE_CB, - TOUCH_OUTSIDE_CB, - SCREENSHOT_EVENT_CB, - DIALOG_TARGET_TOUCH_CB, - DIALOG_DEATH_RECIPIENT_CB, - WINDOW_STATUS_CHANGE_CB, - WINDOW_TITLE_BUTTON_RECT_CHANGE_CB, - WINDOW_VISIBILITY_CHANGE_CB, - WINDOW_NO_INTERACTION_DETECT_CB, - WINDOW_RECT_CHANGE_CB, - SUB_WINDOW_CLOSE_CB, - WINDOW_HIGHLIGHT_CHANGE_CB, - WINDOW_STAGE_EVENT_CB, - WINDOW_STAGE_CLOSE_CB, - SYSTEM_DENSITY_CHANGE_CB, - WINDOW_DISPLAYID_CHANGE_CB, - WINDOW_ROTATION_CHANGE_CB, -}; - class AniWindowRegisterManager { public: AniWindowRegisterManager(); -- Gitee From ef36893a0928825aefb0d46d50b87901580cd91c Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Fri, 15 Aug 2025 03:20:32 +0000 Subject: [PATCH 080/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../window_runtime/window_stage_ani/src/ani_window_listener.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp index cbac650813..ccb884c947 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_listener.cpp @@ -559,7 +559,7 @@ void AniWindowListener::OnRotationChange(const RotationChangeInfo& rotationChang }; if (!eventHandler_ || (eventHandler_->GetEventRunner() && eventHandler_->GetEventRunner()->IsCurrentRunnerThread())) { - TLOGE(WmsLogTag::WMS_ROTATION, "get main event handler failed or current is already main thread!"); + TLOGW(WmsLogTag::WMS_ROTATION, "get main event handler failed or current is already main thread!"); return task(); } eventHandler_->PostSyncTask(task, __func__, AppExecFwk::EventQueue::Priority::IMMEDIATE); -- Gitee From 87bc309f1bdd4eb8e247b8f968bf785027a8343f Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Fri, 15 Aug 2025 04:41:44 +0000 Subject: [PATCH 081/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../window_stage_ani/src/ani_window_utils.cpp | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 0b78a6d84c..dd0b576f30 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -159,18 +159,25 @@ ani_status AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* prope return ret; } - int32_t posX; - int32_t posY; - int32_t width; - int32_t height; - GetIntObject(env, "left", static_cast(windowRect), posX); - GetIntObject(env, "top", static_cast(windowRect), posY); - GetIntObject(env, "width", static_cast(windowRect), width); - GetIntObject(env, "height", static_cast(windowRect), height); + int32_t posX = 0; + int32_t posY = 0; + int32_t width = 0; + int32_t height = 0; + ret |= GetIntObject(env, "left", static_cast(windowRect), posX); + ret |= GetIntObject(env, "top", static_cast(windowRect), posY); + ret |= GetIntObject(env, "width", static_cast(windowRect), width); + ret |= GetIntObject(env, "height", static_cast(windowRect), height); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] GetIntObject Failed, ret : %{public}u", + static_cast(ret)); + return ret; + } result.posX_ = posX; result.posY_ = posY; result.width_ = width; result.height_ = height; + TLOGI(WmsLogTag::DEFAULT, "[ANI] rect is [%{public}u, %{public}u, %{public}u, %{public}u]", + result.posX_, result.posY_, result.width_, result.height_); return ret; } @@ -185,7 +192,6 @@ ani_status AniWindowUtils::GetIntObject(ani_env* env, const char* propertyName, return ret; } result = static_cast(int_value); - TLOGI(WmsLogTag::DEFAULT, "[ANI] %{public}s is: %{public}u", propertyName, result); return ret; } @@ -615,7 +621,11 @@ void AniWindowUtils::ParseRotationChangeResult(ani_env* env, ani_object obj, Rot } Rect windowRect; - GetPropertyRectObject(env, "windowRect", obj, windowRect); + ret = GetPropertyRectObject(env, "windowRect", obj, windowRect); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] GetPropertyRectObject failed, ret: %{public}d", ret); + return; + } rotationChangeResult.rectType_ = static_cast(rectType); rotationChangeResult.windowRect_ = windowRect; } -- Gitee From dcd9a20887d9f886f01a00056aa47e19b977044c Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Fri, 15 Aug 2025 08:35:09 +0000 Subject: [PATCH 082/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../window_stage_ani/src/ani_window_utils.cpp | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index dd0b576f30..41d8f393fe 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -148,7 +148,7 @@ ani_status AniWindowUtils::GetPropertyDoubleObject(ani_env* env, const char* pro return ret; } -ani_status AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* propertyName, +bool AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* propertyName, ani_object object, Rect& result) { ani_ref windowRect; @@ -156,21 +156,20 @@ ani_status AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* prope if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Ref %{public}s Failed, ret : %{public}u", propertyName, static_cast(ret)); - return ret; + return false; } int32_t posX = 0; int32_t posY = 0; int32_t width = 0; int32_t height = 0; - ret |= GetIntObject(env, "left", static_cast(windowRect), posX); - ret |= GetIntObject(env, "top", static_cast(windowRect), posY); - ret |= GetIntObject(env, "width", static_cast(windowRect), width); - ret |= GetIntObject(env, "height", static_cast(windowRect), height); - if (ret != ANI_OK) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] GetIntObject Failed, ret : %{public}u", - static_cast(ret)); - return ret; + bool ret_bool = GetIntObject(env, "left", static_cast(windowRect), posX); + ret_bool |= GetIntObject(env, "top", static_cast(windowRect), posY); + ret_bool |= GetIntObject(env, "width", static_cast(windowRect), width); + ret_bool |= GetIntObject(env, "height", static_cast(windowRect), height); + if (!ret_bool) { + TLOGE(WmsLogTag::DEFAULT, "[ANI] GetIntObject Failed"); + return AniWindowUtils::CreateAniUndefined(env); } result.posX_ = posX; result.posY_ = posY; @@ -178,10 +177,10 @@ ani_status AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* prope result.height_ = height; TLOGI(WmsLogTag::DEFAULT, "[ANI] rect is [%{public}u, %{public}u, %{public}u, %{public}u]", result.posX_, result.posY_, result.width_, result.height_); - return ret; + return ret_bool; } -ani_status AniWindowUtils::GetIntObject(ani_env* env, const char* propertyName, +bool AniWindowUtils::GetIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result) { ani_int int_value; @@ -189,10 +188,10 @@ ani_status AniWindowUtils::GetIntObject(ani_env* env, const char* propertyName, if (ret != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] Object_GetPropertyByName_Int %{public}s Failed, ret : %{public}u", propertyName, static_cast(ret)); - return ret; + return false; } result = static_cast(int_value); - return ret; + return true; } ani_status AniWindowUtils::GetDoubleObject(ani_env* env, ani_object double_object, double& result) @@ -621,9 +620,9 @@ void AniWindowUtils::ParseRotationChangeResult(ani_env* env, ani_object obj, Rot } Rect windowRect; - ret = GetPropertyRectObject(env, "windowRect", obj, windowRect); - if (ret != ANI_OK) { - TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] GetPropertyRectObject failed, ret: %{public}d", ret); + bool ret_bool = GetPropertyRectObject(env, "windowRect", obj, windowRect); + if (!ret_bool) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] GetPropertyRectObject failed"); return; } rotationChangeResult.rectType_ = static_cast(rectType); -- Gitee From 43e139c9f60e432ce4adda2d8a0f98c626e0cc1f Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Fri, 15 Aug 2025 08:36:35 +0000 Subject: [PATCH 083/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../window_stage_ani/include/ani_window_utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h index 539537635c..8c6dec6e19 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/include/ani_window_utils.h @@ -42,9 +42,9 @@ public: static ani_status GetPropertyIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); static ani_status GetPropertyDoubleObject(ani_env* env, const char* propertyName, ani_object object, double& result); - static ani_status GetPropertyRectObject(ani_env* env, const char* propertyName, + static bool GetPropertyRectObject(ani_env* env, const char* propertyName, ani_object object, Rect& result); - static ani_status GetIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); + static bool GetIntObject(ani_env* env, const char* propertyName, ani_object object, int32_t& result); static ani_status GetDoubleObject(ani_env* env, ani_object double_object, double& result); static ani_status NewAniObjectNoParams(ani_env* env, const char* cls, ani_object* object); static ani_status NewAniObject(ani_env* env, const char* cls, const char* signature, ani_object* result, ...); -- Gitee From 833c98fc36005a88134227e73506d1abb0319972 Mon Sep 17 00:00:00 2001 From: yanzhimo1 Date: Fri, 15 Aug 2025 09:54:39 +0000 Subject: [PATCH 084/109] ANI on('rotatonChange') off('rotationChange') Signed-off-by: yanzhimo1 --- .../window_runtime/window_stage_ani/src/ani_window_utils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 41d8f393fe..6e75336571 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -169,7 +169,7 @@ bool AniWindowUtils::GetPropertyRectObject(ani_env* env, const char* propertyNam ret_bool |= GetIntObject(env, "height", static_cast(windowRect), height); if (!ret_bool) { TLOGE(WmsLogTag::DEFAULT, "[ANI] GetIntObject Failed"); - return AniWindowUtils::CreateAniUndefined(env); + return false; } result.posX_ = posX; result.posY_ = posY; -- Gitee From 9f53c88fc53a670c7099af04e4be298d64a6a333 Mon Sep 17 00:00:00 2001 From: Yyongkang Date: Mon, 18 Aug 2025 10:30:42 +0800 Subject: [PATCH 085/109] =?UTF-8?q?ani=E4=B8=8B=E7=89=88=E6=9C=AC=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=B9=B4=E9=99=90=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Yyongkang --- .../kits/ani/display_runtime/display_ani/ets/@ohos.display.ets | 2 +- .../kits/ani/display_runtime/display_ani/include/display_ani.h | 2 +- .../display_runtime/display_ani/include/display_ani_listener.h | 2 +- .../display_runtime/display_ani/include/display_ani_manager.h | 2 +- .../include/ani_embeddable_window_stage.h | 2 +- .../ani/embeddable_window_stage/include/ani_extension_window.h | 2 +- .../src/ani_extension_window_register_manager.cpp | 2 +- .../kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets | 2 +- .../ani/screen_runtime/screen_ani/include/screen_ani_listener.h | 2 +- .../ani/screen_runtime/screen_ani/include/screen_ani_manager.h | 2 +- .../screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets | 2 +- .../screenshot_ani/include/screenshot_ani_manager.h | 2 +- interfaces/kits/ani/sdk/@ohos.display.d.ets | 2 +- interfaces/kits/ani/sdk/@ohos.window.d.ets | 2 +- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- .../scene_session_manager_ani/ets/@ohos.sceneSessionManager.ets | 2 +- .../include/ani_scene_session_manager.h | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 7734d76a20..1f5603428a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index b686edaa49..923236c00f 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h index d2e1d4946d..ae3db26d7c 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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 diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h index 028a053243..549f0d895a 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/embeddable_window_stage/include/ani_embeddable_window_stage.h b/interfaces/kits/ani/embeddable_window_stage/include/ani_embeddable_window_stage.h index da848496bb..0736861dd0 100644 --- a/interfaces/kits/ani/embeddable_window_stage/include/ani_embeddable_window_stage.h +++ b/interfaces/kits/ani/embeddable_window_stage/include/ani_embeddable_window_stage.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window.h b/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window.h index 83dd7213e7..bd1f026580 100644 --- a/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window.h +++ b/interfaces/kits/ani/embeddable_window_stage/include/ani_extension_window.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_register_manager.cpp b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_register_manager.cpp index 0724ed4c05..cb8243d68d 100644 --- a/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_register_manager.cpp +++ b/interfaces/kits/ani/embeddable_window_stage/src/ani_extension_window_register_manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2023 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index e5518b40a1..ccd1c51cef 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h index 9555a91199..d65326c3fa 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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 diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h index f8a39bf271..aa0d88198a 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets index 5178f2a2e6..ddc95de2a2 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h index b4f8de33a2..8a6ca3ed9e 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/sdk/@ohos.display.d.ets b/interfaces/kits/ani/sdk/@ohos.display.d.ets index 09c4598f70..43558637f0 100644 --- a/interfaces/kits/ani/sdk/@ohos.display.d.ets +++ b/interfaces/kits/ani/sdk/@ohos.display.d.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/interfaces/kits/ani/sdk/@ohos.window.d.ets b/interfaces/kits/ani/sdk/@ohos.window.d.ets index dd9b3de67e..dd41a72062 100644 --- a/interfaces/kits/ani/sdk/@ohos.window.d.ets +++ b/interfaces/kits/ani/sdk/@ohos.window.d.ets @@ -1,5 +1,5 @@ /* -* Copyright (c) 2021 Huawei Device Co., Ltd. +* 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 diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 740b3506d4..7fa63b5245 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/ets/@ohos.sceneSessionManager.ets b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/ets/@ohos.sceneSessionManager.ets index dee9776688..1e39bfb3e4 100644 --- a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/ets/@ohos.sceneSessionManager.ets +++ b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/ets/@ohos.sceneSessionManager.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 diff --git a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/include/ani_scene_session_manager.h b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/include/ani_scene_session_manager.h index 1a63bbf3c9..9f2a524d01 100644 --- a/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/include/ani_scene_session_manager.h +++ b/window_scene/interfaces/kits/ani/scene_session_manager/scene_session_manager_ani/include/ani_scene_session_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2025-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 -- Gitee From 6109dc3d332d0a11dfab287e69b10070d35376d4 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Mon, 18 Aug 2025 16:41:50 +0800 Subject: [PATCH 086/109] DMS ANI transfer static and dynamic Signed-off-by: chenpeng --- interfaces/kits/ani/display_runtime/BUILD.gn | 4 + .../display_ani/ets/@ohos.display.ets | 22 +++++ .../display_ani/include/ani_err_utils.h | 1 - .../display_ani/include/display_ani.h | 3 + .../include/display_ani_listener.h | 18 ++-- .../display_ani/src/display_ani.cpp | 87 +++++++++++++++++-- .../display_ani/src/display_ani_listener.cpp | 30 +++---- .../display_ani/src/display_ani_manager.cpp | 48 +++++----- interfaces/kits/ani/screen_runtime/BUILD.gn | 4 + .../screen_ani/ets/@ohos.screen.ets | 38 ++++---- .../screen_ani/include/screen_ani.h | 3 + .../screen_ani/include/screen_ani_listener.h | 6 +- .../screen_ani/include/screen_ani_utils.h | 2 + .../screen_ani/src/screen_ani.cpp | 69 ++++++++++++++- .../screen_ani/src/screen_ani_listener.cpp | 6 +- .../screen_ani/src/screen_ani_manager.cpp | 26 +++--- .../screen_ani/src/screen_ani_utils.cpp | 24 ++++- interfaces/kits/napi/display_runtime/BUILD.gn | 38 ++++++++ .../kits/napi/display_runtime/js_display.h | 1 + interfaces/kits/napi/screen_runtime/BUILD.gn | 38 ++++++++ .../kits/napi/screen_runtime/napi/js_screen.h | 1 + 21 files changed, 369 insertions(+), 100 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/BUILD.gn b/interfaces/kits/ani/display_runtime/BUILD.gn index 1c6f20ff69..b1f7cc3344 100644 --- a/interfaces/kits/ani/display_runtime/BUILD.gn +++ b/interfaces/kits/ani/display_runtime/BUILD.gn @@ -24,6 +24,7 @@ config("display_common_config") { "../../../innerkits/wm", "../../../innerkits/dm", "../../../../wm/include", + "../../napi/display_runtime", ] } @@ -62,6 +63,7 @@ ohos_shared_library("displayani_kit") { "../../../../dm:libdm", "../../../../utils:libwmutil", "../../../../utils:libwmutil_base", + "../../../../interfaces/kits/napi/display_runtime:display_kit" ] external_deps = [ @@ -72,6 +74,8 @@ ohos_shared_library("displayani_kit") { "hilog:libhilog", "hitrace:hitrace_meter", "runtime_core:ani", + "napi:ace_napi", + "runtime_core:ani_helpers", ] innerapi_tags = [ "platformsdk" ] diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 7734d76a20..a70296bc38 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -333,11 +333,33 @@ export class DisplayImpl implements Display { this.syncOff(type, callback); } + static transferStatic(input: Any): Object { + let display = new DisplayImpl(); + let display_input: ESValue = ESValue.wrap(input); + let ret = false; + if (display_input !== ESValue.Undefined) { + ret = DisplayImpl.nativeTransferStatic(display_input, display as Object); + display.state = display.state_ as DisplayState; + display.orientation = display.orientation_ as Orientation; + } + if (!ret) { + return {}; + } + return display as Object; + } + + static transferDynamic(input: Object): Any { + return DisplayImpl.nativeTransferDynamic((input as DisplayImpl).displayRef).unwrap(); + } + native syncOn(type: string, callback: object): void; native syncOff(type: string, callback?: object): void; native getAvailableAreaInternal(rect: Rect): void; native getCutoutInfoInternal(cutoutInfo: CutoutInfo): void; native hasImmersiveWindowInternal(): boolean; + + native static nativeTransferStatic(input: ESValue, display: Object): boolean; + native static nativeTransferDynamic(nativeObj: long): ESValue; } function minusRectArray(rectArr: Array): void { diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/ani_err_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/ani_err_utils.h index 9f5cd855a2..87fab95a96 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/ani_err_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/ani_err_utils.h @@ -18,7 +18,6 @@ #include "ani.h" #include "dm_common.h" -#include "wm_common.h" namespace OHOS::Rosen { class AniErrUtils { diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index b686edaa49..8690219579 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -34,6 +34,9 @@ public: static void CreateDisplayAni(sptr display, ani_object displayAni, ani_env* env); void OnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); void OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); + static ani_boolean TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object displayAniObj); + static ani_object TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj); + sptr GetDisplay() { return display_; } private: DMError UnregisterAllDisplayListenerWithType(std::string type); DMError UnregisterDisplayListenerWithType(std::string type, ani_env *env, ani_ref aniCallback); diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h index d2e1d4946d..bc777877b0 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_listener.h @@ -59,15 +59,15 @@ private: wptr weakRef_ = nullptr; std::shared_ptr eventHandler_ = nullptr; }; -const std::string EVENT_ADD = "add"; -const std::string EVENT_REMOVE = "remove"; -const std::string EVENT_CHANGE = "change"; -const std::string EVENT_PRIVATE_MODE_CHANGE = "privateModeChange"; -const std::string EVENT_FOLD_STATUS_CHANGED = "foldStatusChange"; -const std::string EVENT_FOLD_ANGLE_CHANGED = "foldAngleChange"; -const std::string EVENT_CAPTURE_STATUS_CHANGED = "captureStatusChange"; -const std::string EVENT_DISPLAY_MODE_CHANGED = "foldDisplayModeChange"; -const std::string EVENT_AVAILABLE_AREA_CHANGED = "availableAreaChange"; +const std::string ANI_EVENT_ADD = "add"; +const std::string ANI_EVENT_REMOVE = "remove"; +const std::string ANI_EVENT_CHANGE = "change"; +const std::string ANI_EVENT_PRIVATE_MODE_CHANGE = "privateModeChange"; +const std::string ANI_EVENT_FOLD_STATUS_CHANGED = "foldStatusChange"; +const std::string ANI_EVENT_FOLD_ANGLE_CHANGED = "foldAngleChange"; +const std::string ANI_EVENT_CAPTURE_STATUS_CHANGED = "captureStatusChange"; +const std::string ANI_EVENT_DISPLAY_MODE_CHANGED = "foldDisplayModeChange"; +const std::string ANI_EVENT_AVAILABLE_AREA_CHANGED = "availableAreaChange"; } // namespace Rosen } // namespace OHOS #endif \ No newline at end of file diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index f594f43d0c..4d0c558bb3 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -15,17 +15,22 @@ #include #include "ani.h" +#include "ani_err_utils.h" +#include "display.h" #include "display_ani.h" +#include "display_ani_manager.h" +#include "display_ani_utils.h" #include "display_info.h" -#include "display.h" -#include "singleton_container.h" #include "display_manager.h" -#include "window_manager_hilog.h" #include "dm_common.h" -#include "display_ani_utils.h" +#include "interop_js/arkts_esvalue.h" +#include "interop_js/arkts_interop_js_api.h" +#include "interop_js/hybridgref_ani.h" +#include "interop_js/hybridgref_napi.h" +#include "js_display.h" #include "refbase.h" -#include "display_ani_manager.h" -#include "ani_err_utils.h" +#include "singleton_container.h" +#include "window_manager_hilog.h" namespace OHOS { namespace Rosen { @@ -169,7 +174,7 @@ void DisplayAni::OnRegisterCallback(ani_env* env, ani_object obj, ani_string typ } DMError ret = DMError::DM_OK; std::lock_guard lock(mtx_); - if (typeString == EVENT_AVAILABLE_AREA_CHANGED) { + if (typeString == ANI_EVENT_AVAILABLE_AREA_CHANGED) { auto displayId = display_->GetId(); TLOGI(WmsLogTag::DMS, "[ANI] availableAreaChange begin"); ret = SingletonContainer::Get().RegisterAvailableAreaListener(displayAniListener, displayId); @@ -245,7 +250,7 @@ DMError DisplayAni::UnregisterAllDisplayListenerWithType(std::string type) continue; } it->second->RemoveAllCallback(); - if (type == EVENT_AVAILABLE_AREA_CHANGED) { + if (type == ANI_EVENT_AVAILABLE_AREA_CHANGED) { auto displayId = display_->GetId(); sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener, displayId); @@ -276,7 +281,7 @@ DMError DisplayAni::UnregisterDisplayListenerWithType(std::string type, ani_env* continue; } it->second->RemoveCallback(env, type, callback); - if (type == EVENT_AVAILABLE_AREA_CHANGED) { + if (type == ANI_EVENT_AVAILABLE_AREA_CHANGED) { TLOGI(WmsLogTag::DMS, "[ANI] start to unregis display event listener! event = %{public}s", type.c_str()); auto displayId = display_->GetId(); @@ -309,6 +314,66 @@ void DisplayAni::CreateDisplayAni(sptr display, ani_object displayObj, } } +ani_boolean DisplayAni::TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object displayAniObj) +{ + TLOGI(WmsLogTag::DMS, "begin"); + void *unwrapResult = nullptr; + auto ret = arkts_esvalue_unwrap(env, input, &unwrapResult); + if (!ret) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to unwrap input, %{public}d", ret); + return false; + } + if (unwrapResult == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] unwrapResult is nullptr"); + return false; + } + JsDisplay* jsDisplay = static_cast(unwrapResult); + if (jsDisplay == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] jsDisplay is nullptr"); + return false; + } + + sptr display = jsDisplay->GetDisplay(); + DisplayAniUtils::CvtDisplay(display, env, displayAniObj); + DisplayAni::CreateDisplayAni(display, displayAniObj, env); + return true; +} + +ani_object DisplayAni::TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DMS, "begin"); + DisplayAni* aniDisplay = reinterpret_cast(nativeObj); + if (aniDisplay == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] aniDisplay is nullptr"); + return nullptr; + } + napi_env napiEnv = {}; + if (!arkts_napi_scope_open(env, &napiEnv)) { + TLOGE(WmsLogTag::DMS, "arkts_napi_scope_open failed"); + return nullptr; + } + + sptr display = aniDisplay->GetDisplay(); + napi_value jsDisplay = CreateJsDisplayObject(napiEnv, display); + hybridgref ref = nullptr; + if (!hybridgref_create_from_napi(napiEnv, jsDisplay, &ref)) { + TLOGE(WmsLogTag::DMS, "hybridgref_create_from_napi failed"); + return nullptr; + } + ani_object result = nullptr; + if (!hybridgref_get_esvalue(env, ref, &result)) { + hybridgref_delete_from_napi(napiEnv, ref); + TLOGE(WmsLogTag::DMS, "hybridgref_get_esvalue failed"); + return nullptr; + } + hybridgref_delete_from_napi(napiEnv, ref); + if (!arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr)) { + TLOGE(WmsLogTag::DMS, "arkts_napi_scope_close_n failed"); + return nullptr; + } + return result; +} + extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { @@ -369,6 +434,10 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(DisplayAni::RegisterCallback)}, ani_native_function {"syncOff", nullptr, reinterpret_cast(DisplayAni::UnRegisterCallback)}, + ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}C{std.core.Object}:z", + reinterpret_cast(DisplayAni::TransferStatic)}, + ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", + reinterpret_cast(DisplayAni::TransferDynamic)}, }; if ((ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size())) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp index e21fd0cf14..514d06d8e5 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_listener.cpp @@ -95,7 +95,7 @@ void DisplayAniListener::OnCreate(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; } - auto it = aniCallback_.find(EVENT_ADD); + auto it = aniCallback_.find(ANI_EVENT_ADD); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Add callback has not been registered"); return; @@ -140,7 +140,7 @@ void DisplayAniListener::OnDestroy(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] Ani callback is empty!"); return; } - auto it = aniCallback_.find(EVENT_REMOVE); + auto it = aniCallback_.find(ANI_EVENT_REMOVE); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] Remove callback has not been registered"); return; @@ -184,7 +184,7 @@ void DisplayAniListener::OnChange(DisplayId id) TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); return; } - auto it = aniCallback_.find(EVENT_CHANGE); + auto it = aniCallback_.find(ANI_EVENT_CHANGE); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not this event, return"); return; @@ -227,7 +227,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not register!"); return; } - if (aniCallback_.find(EVENT_PRIVATE_MODE_CHANGE) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_PRIVATE_MODE_CHANGE) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnPrivateWindow not this event, return"); return; } @@ -236,7 +236,7 @@ void DisplayAniListener::OnPrivateWindow(bool hasPrivate) return; } - auto it = aniCallback_.find(EVENT_PRIVATE_MODE_CHANGE); + auto it = aniCallback_.find(ANI_EVENT_PRIVATE_MODE_CHANGE); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, hasPrivate] () { DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "captureStatusChangedCallback", @@ -264,7 +264,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) TLOGE(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged not register!"); return; } - if (aniCallback_.find(EVENT_FOLD_STATUS_CHANGED) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_FOLD_STATUS_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldStatusChanged not this event, return"); return; } @@ -272,7 +272,7 @@ void DisplayAniListener::OnFoldStatusChanged(FoldStatus foldStatus) TLOGE(WmsLogTag::DMS, "[ANI] env is nullptr"); return; } - auto it = aniCallback_.find(EVENT_FOLD_STATUS_CHANGED); + auto it = aniCallback_.find(ANI_EVENT_FOLD_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldStatus] () { DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "foldStatusCallback", @@ -299,12 +299,12 @@ void DisplayAniListener::OnFoldAngleChanged(std::vector foldAngles) TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not register!"); return; } - if (aniCallback_.find(EVENT_FOLD_ANGLE_CHANGED) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_FOLD_ANGLE_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnFoldAngleChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallback_.find(EVENT_FOLD_ANGLE_CHANGED); + auto it = aniCallback_.find(ANI_EVENT_FOLD_ANGLE_CHANGED); ani_array_double cbArray; DisplayAniUtils::CreateAniArrayDouble(env_, foldAngles.size(), &cbArray, foldAngles); for (auto oneAniCallback : it->second) { @@ -336,12 +336,12 @@ void DisplayAniListener::OnCaptureStatusChanged(bool isCapture) TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not register!"); return; } - if (aniCallback_.find(EVENT_CAPTURE_STATUS_CHANGED) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_CAPTURE_STATUS_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnCaptureStatusChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallback_.find(EVENT_CAPTURE_STATUS_CHANGED); + auto it = aniCallback_.find(ANI_EVENT_CAPTURE_STATUS_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, isCapture] () { DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "captureStatusChangedCallback", @@ -372,12 +372,12 @@ void DisplayAniListener::OnDisplayModeChanged(FoldDisplayMode foldDisplayMode) TLOGE(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged not register!"); return; } - if (aniCallback_.find(EVENT_DISPLAY_MODE_CHANGED) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_DISPLAY_MODE_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisplayModeChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallback_.find(EVENT_DISPLAY_MODE_CHANGED); + auto it = aniCallback_.find(ANI_EVENT_DISPLAY_MODE_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, foldDisplayMode] () { DisplayAniUtils::CallAniFunctionVoid(env, "@ohos.display.display", "foldDisplayModeCallback", @@ -407,12 +407,12 @@ void DisplayAniListener::OnAvailableAreaChanged(DMRect area) TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not register!"); return; } - if (aniCallback_.find(EVENT_AVAILABLE_AREA_CHANGED) == aniCallback_.end()) { + if (aniCallback_.find(ANI_EVENT_AVAILABLE_AREA_CHANGED) == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnAvailableAreaChanged not this event, return"); return; } if (env_ != nullptr) { - auto it = aniCallback_.find(EVENT_AVAILABLE_AREA_CHANGED); + auto it = aniCallback_.find(ANI_EVENT_AVAILABLE_AREA_CHANGED); for (auto oneAniCallback : it->second) { auto task = [env = env_, oneAniCallback, area] () { ani_object rectObj = DisplayAniUtils::CreateRectObject(env); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index be31e88764..68aef86c76 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -264,26 +264,26 @@ DmErrorCode DisplayManagerAni::ProcessRegisterCallback(ani_env* env, std::string sptr displayAniListener) { DmErrorCode ret = DmErrorCode::DM_ERROR_INVALID_PARAM; - if (typeStr == EVENT_ADD || typeStr == EVENT_REMOVE || typeStr == EVENT_CHANGE) { + if (typeStr == ANI_EVENT_ADD || typeStr == ANI_EVENT_REMOVE || typeStr == ANI_EVENT_CHANGE) { TLOGI(WmsLogTag::DMS, "ProcessRegisterCallback %{public}s", typeStr.c_str()); ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterDisplayListener(displayAniListener)); - } else if (typeStr == EVENT_FOLD_STATUS_CHANGED) { + } else if (typeStr == ANI_EVENT_FOLD_STATUS_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterFoldStatusListener(displayAniListener)); - } else if (typeStr == EVENT_DISPLAY_MODE_CHANGED) { + } else if (typeStr == ANI_EVENT_DISPLAY_MODE_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterDisplayModeListener(displayAniListener)); - } else if (typeStr == EVENT_AVAILABLE_AREA_CHANGED) { + } else if (typeStr == ANI_EVENT_AVAILABLE_AREA_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterAvailableAreaListener(displayAniListener)); - } else if (typeStr == EVENT_FOLD_ANGLE_CHANGED) { + } else if (typeStr == ANI_EVENT_FOLD_ANGLE_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterFoldAngleListener(displayAniListener)); - } else if (typeStr == EVENT_CAPTURE_STATUS_CHANGED) { + } else if (typeStr == ANI_EVENT_CAPTURE_STATUS_CHANGED) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterCaptureStatusListener(displayAniListener)); - } else if (typeStr == EVENT_PRIVATE_MODE_CHANGE) { + } else if (typeStr == ANI_EVENT_PRIVATE_MODE_CHANGE) { ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterPrivateWindowListener(displayAniListener)); } @@ -349,30 +349,30 @@ DMError DisplayManagerAni::UnRegisterDisplayListenerWithType(std::string type, a env->Reference_StrictEquals(callback, it->first, &isEquals); if (isEquals) { it->second->RemoveCallback(env, type, callback); - if (type == EVENT_ADD || type == EVENT_REMOVE || type == EVENT_CHANGE) { + if (type == ANI_EVENT_ADD || type == ANI_EVENT_REMOVE || type == ANI_EVENT_CHANGE) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayListener(thisListener); - } else if (type == EVENT_FOLD_STATUS_CHANGED) { + } else if (type == ANI_EVENT_FOLD_STATUS_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterFoldStatusListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldStatusChange success"); - } else if (type == EVENT_DISPLAY_MODE_CHANGED) { + } else if (type == ANI_EVENT_DISPLAY_MODE_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayModeListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldDisplayModeChange success"); - } else if (type == EVENT_AVAILABLE_AREA_CHANGED) { + } else if (type == ANI_EVENT_AVAILABLE_AREA_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener availableAreaListener success"); - } else if (type == EVENT_FOLD_ANGLE_CHANGED) { + } else if (type == ANI_EVENT_FOLD_ANGLE_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterFoldAngleListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener foldAngleListener success"); - } else if (type == EVENT_CAPTURE_STATUS_CHANGED) { + } else if (type == ANI_EVENT_CAPTURE_STATUS_CHANGED) { sptr thisListener(it->second); SingletonContainer::Get().UnregisterCaptureStatusListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener captureStatusListener success"); - } else if (type == EVENT_PRIVATE_MODE_CHANGE) { + } else if (type == ANI_EVENT_PRIVATE_MODE_CHANGE) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterPrivateWindowListener(thisListener); TLOGI(WmsLogTag::DMS, "[ANI] UnRegisterDisplayListener privateWindowListener success"); @@ -394,25 +394,25 @@ DMError DisplayManagerAni::UnregisterAllDisplayListenerWithType(std::string type DMError ret = DMError::DM_OK; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { it->second->RemoveAllCallback(); - if (type == EVENT_ADD || type == EVENT_REMOVE || type == EVENT_CHANGE) { + if (type == ANI_EVENT_ADD || type == ANI_EVENT_REMOVE || type == ANI_EVENT_CHANGE) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayListener(thisListener); - } else if (type == EVENT_FOLD_STATUS_CHANGED) { + } else if (type == ANI_EVENT_FOLD_STATUS_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterFoldStatusListener(thisListener); - } else if (type == EVENT_DISPLAY_MODE_CHANGED) { + } else if (type == ANI_EVENT_DISPLAY_MODE_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterDisplayModeListener(thisListener); - } else if (type == EVENT_AVAILABLE_AREA_CHANGED) { + } else if (type == ANI_EVENT_AVAILABLE_AREA_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterAvailableAreaListener(thisListener); - } else if (type == EVENT_FOLD_ANGLE_CHANGED) { + } else if (type == ANI_EVENT_FOLD_ANGLE_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterFoldAngleListener(thisListener); - } else if (type == EVENT_CAPTURE_STATUS_CHANGED) { + } else if (type == ANI_EVENT_CAPTURE_STATUS_CHANGED) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterCaptureStatusListener(thisListener); - } else if (type == EVENT_PRIVATE_MODE_CHANGE) { + } else if (type == ANI_EVENT_PRIVATE_MODE_CHANGE) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterPrivateWindowListener(thisListener); } @@ -427,14 +427,14 @@ ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_long displayId TLOGI(WmsLogTag::DMS, "[ANI] begin"); bool hasPrivateWindow = false; if (displayId < 0) { - std::string errMsg = "Invalid args count, need one arg"; - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_SCREEN, ""); + TLOGE(WmsLogTag::DMS, "Invalid displayId: %{public}" PRId64, displayId); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_ILLEGAL_PARAM, "Invalid displayId"); return hasPrivateWindow; } DmErrorCode errCode = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().HasPrivateWindow(static_cast(displayId), hasPrivateWindow)); if (errCode != DmErrorCode::DM_OK) { - std::string errMsg = "Failed to convert parameter to displayId"; + TLOGE(WmsLogTag::DMS, "Failed to convert parameter to displayId"); AniErrUtils::ThrowBusinessError(env, errCode, "Failed to convert parameter to displayId"); return hasPrivateWindow; } diff --git a/interfaces/kits/ani/screen_runtime/BUILD.gn b/interfaces/kits/ani/screen_runtime/BUILD.gn index df3fb86ea9..fce7762139 100644 --- a/interfaces/kits/ani/screen_runtime/BUILD.gn +++ b/interfaces/kits/ani/screen_runtime/BUILD.gn @@ -24,6 +24,7 @@ config("screen_common_config") { "../../../innerkits/wm", "../../../innerkits/dm", "../../../../wm/include", + "../../napi/screen_runtime/napi", ] } @@ -63,6 +64,7 @@ ohos_shared_library("screenani_kit") { "../../../../dm:libdm", "../../../../utils:libwmutil", "../../../../utils:libwmutil_base", + "../../../../interfaces/kits/napi/screen_runtime:screen_kit", ] external_deps = [ @@ -75,6 +77,8 @@ ohos_shared_library("screenani_kit") { "hilog:libhilog", "hitrace:hitrace_meter", "runtime_core:ani", + "napi:ace_napi", + "runtime_core:ani_helpers", ] innerapi_tags = [ "platformsdk" ] diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets index e5518b40a1..8155e66e15 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets +++ b/interfaces/kits/ani/screen_runtime/screen_ani/ets/@ohos.screen.ets @@ -99,9 +99,7 @@ function minusScreens(screens: Array) { if (currentScreen.id < 0) { break; } - minusScreenModeInfo(currentScreen.supportedModeInfo_); - let current: Screen = new ScreenImpl(screens[i] as ScreenImpl); - screens[i] = current; + minusScreenModeInfo(currentScreen.supportedModeInfo); } screens.splice(i); } @@ -150,31 +148,17 @@ class ScreenImpl implements Screen { } } - constructor(screen: ScreenImpl) { - this.id = screen.id; - this.parent = screen.parent; - this.activeModeIndex = screen.activeModeIndex; - this.orientation = screen.orientation_ as Orientation; - this.supportedModeInfo = screen.supportedModeInfo_; - this.sourceMode = screen.sourceMode_ as ScreenSourceMode; - this.screenNativeObj = screen.screenNativeObj; - } - readonly id: long; readonly parent: long; readonly supportedModeInfo: Array; - supportedModeInfo_: Array; readonly activeModeIndex: long; readonly orientation: Orientation; - orientation_: int; readonly sourceMode: ScreenSourceMode; - sourceMode_: int; - sourceModeLen: int; screenNativeObj: long; @@ -200,7 +184,27 @@ class ScreenImpl implements Screen { }); } + static transferStatic(input: Any): Object { + let screen = new ScreenImpl(); + let screen_input: ESValue = ESValue.wrap(input); + let ret = false; + if (screen_input !== ESValue.Undefined) { + ret = ScreenImpl.nativeTransferStatic(screen_input, screen as Object); + minusScreenModeInfo(screen.supportedModeInfo); + } + if (!ret) { + return {}; + } + return screen as Object; + } + + static transferDynamic(input: Object): Any { + return ScreenImpl.nativeTransferDynamic((input as ScreenImpl).screenNativeObj).unwrap(); + } + native setDensityDpiInternal(densityDpi: double): void; + native static nativeTransferStatic(input: ESValue, screen: Object): boolean; + native static nativeTransferDynamic(nativeObj: long): ESValue; } export interface ScreenModeInfo { diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h index 81c9ce0606..c8bd8d8573 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h @@ -26,6 +26,9 @@ public: explicit ScreenAni(const sptr& screen); static void SetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi); void OnSetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi); + static ani_boolean TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object screenAniObj); + static ani_object TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj); + sptr GetScreen() { return screen_; } private: sptr screen_ = nullptr; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h index 9555a91199..b7e9cf2b57 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_listener.h @@ -46,9 +46,9 @@ private: wptr weakRef_; std::shared_ptr eventHandler_ = nullptr; }; -const std::string EVENT_CONNECT = "connect"; -const std::string EVENT_DISCONNECT = "disconnect"; -const std::string EVENT_CHANGE = "change"; +const std::string ANI_EVENT_CONNECT = "connect"; +const std::string ANI_EVENT_DISCONNECT = "disconnect"; +const std::string ANI_EVENT_CHANGE = "change"; } // namespace Rosen } // namespace OHOS #endif /* OHOS_JS_SCREEN_LISTENER_H */ \ No newline at end of file diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h index ff85c1f4dd..352fcbffca 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani_utils.h @@ -43,6 +43,8 @@ static ani_status ConvertScreens(ani_env *env, std::vector> screen, static ani_object NewNativeObject(ani_env* env, const std::string& objName); static ani_array_ref NewNativeArray(ani_env* env, const std::string& objName, uint32_t size); + +static ani_enum_item CreateAniEnum(ani_env* env, const char* enum_descriptor, ani_size index); }; } } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp index 6a82934348..f06da816e9 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp @@ -13,10 +13,17 @@ * limitations under the License. */ #include "screen_ani.h" - + +#include "ani_err_utils.h" #include "dm_common.h" +#include "interop_js/arkts_esvalue.h" +#include "interop_js/arkts_interop_js_api.h" +#include "interop_js/hybridgref_ani.h" +#include "interop_js/hybridgref_napi.h" +#include "js_screen.h" +#include "screen_ani_utils.h" #include "window_manager_hilog.h" -#include "ani_err_utils.h" + namespace OHOS { namespace Rosen { @@ -43,6 +50,64 @@ void ScreenAni::OnSetDensityDpi(ani_env* env, ani_object obj, ani_double density AniErrUtils::ThrowBusinessError(env, ret, "JsScreen::OnSetDensityDpi failed."); } } + +ani_boolean ScreenAni::TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object screenAniObj) +{ + TLOGI(WmsLogTag::DMS, "begin"); + void *unwrapResult = nullptr; + auto ret = arkts_esvalue_unwrap(env, input, &unwrapResult); + if (!ret) { + TLOGE(WmsLogTag::DMS, "[ANI] fail to unwrap input, ret: %{public}d", ret); + return false; + } + if (unwrapResult == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] unwrapResult is nullptr"); + return false; + } + JsScreen* jsScreen = static_cast(unwrapResult); + if (jsScreen == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] jsScreen is nullptr"); + return false; + } + + sptr screen = jsScreen->GetScreen(); + ScreenAniUtils::ConvertScreen(env, screen, screenAniObj); + return true; +} +ani_object ScreenAni::TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj) +{ + TLOGI(WmsLogTag::DMS, "begin"); + ScreenAni* aniScreen = reinterpret_cast(nativeObj); + if (aniScreen == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] aniScreen is nullptr"); + return nullptr; + } + napi_env napiEnv = {}; + if (!arkts_napi_scope_open(env, &napiEnv)) { + TLOGE(WmsLogTag::DMS, "arkts_napi_scope_open failed"); + return nullptr; + } + + sptr screen = aniScreen->GetScreen(); + napi_value jsScreen = CreateJsScreenObject(napiEnv, screen); + hybridgref ref = nullptr; + if (!hybridgref_create_from_napi(napiEnv, jsScreen, &ref)) { + TLOGE(WmsLogTag::DMS, "hybridgref_create_from_napi failed"); + return nullptr; + } + ani_object result = nullptr; + if (!hybridgref_get_esvalue(env, ref, &result)) { + hybridgref_delete_from_napi(napiEnv, ref); + TLOGE(WmsLogTag::DMS, "hybridgref_get_esvalue failed"); + return nullptr; + } + hybridgref_delete_from_napi(napiEnv, ref); + if (!arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr)) { + TLOGE(WmsLogTag::DMS, "arkts_napi_scope_close_n failed"); + return nullptr; + } + return result; +} } } \ No newline at end of file diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp index e87cff198c..1debd618ce 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_listener.cpp @@ -84,7 +84,7 @@ void ScreenAniListener::OnConnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not register!"); return; } - auto it = aniCallback_.find(EVENT_CONNECT); + auto it = aniCallback_.find(ANI_EVENT_CONNECT); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnConnect not this event, return"); return; @@ -131,7 +131,7 @@ void ScreenAniListener::OnDisconnect(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not register!"); return; } - auto it = aniCallback_.find(EVENT_DISCONNECT); + auto it = aniCallback_.find(ANI_EVENT_DISCONNECT); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnDisconnect not this event, return"); return; @@ -179,7 +179,7 @@ void ScreenAniListener::OnChange(ScreenId id) TLOGE(WmsLogTag::DMS, "[ANI] OnChange not register!"); return; } - auto it = aniCallback_.find(EVENT_CHANGE); + auto it = aniCallback_.find(ANI_EVENT_CHANGE); if (it == aniCallback_.end()) { TLOGE(WmsLogTag::DMS, "[ANI] OnChange not this event, return"); return; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp index 004f048b09..a049799e25 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_manager.cpp @@ -18,14 +18,14 @@ #include #include "ani.h" -#include "singleton_container.h" -#include "window_manager_hilog.h" +#include "ani_err_utils.h" #include "dm_common.h" #include "refbase.h" #include "screen_ani.h" #include "screen_ani_utils.h" #include "screen_ani_listener.h" -#include "ani_err_utils.h" +#include "singleton_container.h" +#include "window_manager_hilog.h" namespace OHOS { namespace Rosen { @@ -108,7 +108,7 @@ DmErrorCode ScreenManagerAni::ProcessRegisterCallback(ani_env* env, std::string& sptr screenAniListener) { DmErrorCode ret = DmErrorCode::DM_ERROR_INVALID_PARAM; - if (typeStr == EVENT_CHANGE || typeStr == EVENT_CONNECT || typeStr == EVENT_DISCONNECT) { + if (typeStr == ANI_EVENT_CHANGE || typeStr == ANI_EVENT_CONNECT || typeStr == ANI_EVENT_DISCONNECT) { TLOGI(WmsLogTag::DMS, "ProcessRegisterCallback %{public}s", typeStr.c_str()); ret = DM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().RegisterScreenListener(screenAniListener)); @@ -134,13 +134,9 @@ void ScreenManagerAni::OnUnRegisterCallback(ani_env* env, ani_string type, ani_r } if (ret != DmErrorCode::DM_OK) { - DmErrorCode errCode = DmErrorCode::DM_ERROR_INVALID_PARAM; - if (ret == DmErrorCode::DM_ERROR_NOT_SYSTEM_APP) { - errCode = ret; - } std::string errMsg = "[ANI] failed to unregister screen listener with type"; TLOGE(WmsLogTag::DMS, "[ANI] failed to unregister screen listener with type"); - AniErrUtils::ThrowBusinessError(env, DMError::DM_ERROR_INVALID_PARAM, errMsg); + AniErrUtils::ThrowBusinessError(env, ret, errMsg); } } @@ -179,7 +175,7 @@ DMError ScreenManagerAni::UnRegisterScreenListenerWithType(std::string type, ani env->Reference_StrictEquals(cbRef, it->first, &isEquals); if (isEquals) { it->second->RemoveCallback(env, type, callback); - if (type == EVENT_CHANGE) { + if (type == ANI_EVENT_CONNECT || type == ANI_EVENT_DISCONNECT || type == ANI_EVENT_CHANGE) { TLOGI(WmsLogTag::DMS, "[ANI] start to unregis screen event listener! event = %{public}s", type.c_str()); sptr thisListener(it->second); @@ -207,7 +203,7 @@ DMError ScreenManagerAni::UnRegisterAllScreenListenerWithType(std::string type) DMError ret = DMError::DM_OK; for (auto it = jsCbMap_[type].begin(); it != jsCbMap_[type].end();) { it->second->RemoveAllCallback(); - if (type == EVENT_CHANGE) { + if (type == ANI_EVENT_CONNECT || type == ANI_EVENT_DISCONNECT || type == ANI_EVENT_CHANGE) { sptr thisListener(it->second); ret = SingletonContainer::Get().UnregisterScreenListener(thisListener); } @@ -221,7 +217,7 @@ ani_long ScreenManagerAni::MakeMirror(ani_env* env, ani_long mainScreen, ani_obj std::vector screenIds; env->Object_GetPropertyByName_Int(mirrorScreen, "length", &length); TLOGI(WmsLogTag::DMS, "[ANI] length %{public}d", (ani_int)length); - for (uint32_t i = 0; i < length; i++) { + for (int32_t i = 0; i < length; i++) { ani_ref screenIdRef; auto ret = env->Object_CallMethodByName_Ref(mirrorScreen, "$_get", "i:C{std.core.Object}", &screenIdRef, (ani_int)i); @@ -329,6 +325,10 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) std::array methods = { ani_native_function {"setDensityDpiInternal", "d:", reinterpret_cast(ScreenAni::SetDensityDpi)}, + ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}C{std.core.Object}:z", + reinterpret_cast(ScreenAni::TransferStatic)}, + ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", + reinterpret_cast(ScreenAni::TransferDynamic)}, }; if ((ret = env->Class_BindNativeMethods(screenCls, methods.data(), methods.size())) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] bind screen class fail %{public}u", ret); @@ -340,4 +340,4 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) } } -} +} \ No newline at end of file diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp index 7ffa818d1f..0ca827744b 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani_utils.cpp @@ -67,8 +67,10 @@ ani_status ScreenAniUtils::ConvertScreen(ani_env *env, sptr screen, ani_ env->Object_SetFieldByName_Long(obj, "parent", static_cast(info->GetParentId())); env->Object_SetFieldByName_Long(obj, "activeModeIndex", static_cast(info->GetModeId())); - env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetOrientation())); - env->Object_SetFieldByName_Int(obj, "sourceMode_", static_cast(info->GetSourceMode())); + env->Object_SetFieldByName_Ref(obj, "orientation", ScreenAniUtils::CreateAniEnum(env, + "@ohos.screen.screen.Orientation", static_cast(info->GetOrientation()))); + env->Object_SetFieldByName_Ref(obj, "sourceMode", ScreenAniUtils::CreateAniEnum(env, + "@ohos.screen.screen.ScreenSourceMode", static_cast(info->GetSourceMode()))); std::unique_ptr screenAni = std::make_unique(screen); if (ANI_OK != env->Object_SetFieldByName_Long(obj, "screenNativeObj", reinterpret_cast(screenAni.release()))) { @@ -88,8 +90,10 @@ ani_status ScreenAniUtils::ConvertScreen(ani_env *env, sptr screen, ani_ } index++; } - if (ANI_OK != env->Object_SetFieldByName_Ref(obj, "supportedModeInfo_", screenModeInfos)) { - TLOGE(WmsLogTag::DMS, "[ANI] get ScreenModeInfos fail"); + auto ret = env->Object_SetFieldByName_Ref(obj, "supportedModeInfo", + static_cast(screenModeInfos)); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DMS, "[ANI] get ScreenModeInfos fail, ret: %{public}d", ret); return ANI_ERROR; } return ANI_OK; @@ -186,5 +190,17 @@ ani_status ScreenAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, return ret; } +ani_enum_item ScreenAniUtils::CreateAniEnum(ani_env* env, const char* enum_descriptor, ani_size index) +{ + ani_enum enumType; + ani_status ret = env->FindEnum(enum_descriptor, &enumType); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] Failed to find enum,%{public}s", enum_descriptor); + return nullptr; + } + ani_enum_item enumItem; + env->Enum_GetEnumItemByIndex(enumType, index, &enumItem); + return enumItem; +} } } \ No newline at end of file diff --git a/interfaces/kits/napi/display_runtime/BUILD.gn b/interfaces/kits/napi/display_runtime/BUILD.gn index a0f98c9ecb..f68e9d2891 100644 --- a/interfaces/kits/napi/display_runtime/BUILD.gn +++ b/interfaces/kits/napi/display_runtime/BUILD.gn @@ -69,3 +69,41 @@ ohos_shared_library("display_napi") { subsystem_name = "window" } ## Build display_napi.so }}} + +ohos_shared_library("display_kit") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + sources = [ + "js_display.cpp", + "js_display_listener.cpp", + ] + + configs = [ + ":display_config", + "../../../../resources/config/build:coverage_flags", + ] + + deps = [ + "../../../../dm:libdm", + "../../../../utils:libwmutil", + "../../../../utils:libwmutil_base", + "../common:wm_napi_util", + ] + + external_deps = [ + "ability_runtime:runtime", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "napi:ace_napi", + ] + + innerapi_tags = [ "platformsdk" ] + part_name = "window_manager" + subsystem_name = "window" +} diff --git a/interfaces/kits/napi/display_runtime/js_display.h b/interfaces/kits/napi/display_runtime/js_display.h index 84e9905442..fd9279eac5 100644 --- a/interfaces/kits/napi/display_runtime/js_display.h +++ b/interfaces/kits/napi/display_runtime/js_display.h @@ -78,6 +78,7 @@ public: static napi_value GetDisplayCapability(napi_env env, napi_callback_info info); static napi_value RegisterDisplayManagerCallback(napi_env env, napi_callback_info info); static napi_value UnregisterDisplayManagerCallback(napi_env env, napi_callback_info info); + sptr GetDisplay() { return display_; } private: sptr display_ = nullptr; diff --git a/interfaces/kits/napi/screen_runtime/BUILD.gn b/interfaces/kits/napi/screen_runtime/BUILD.gn index 02aaec1f98..3c75394218 100644 --- a/interfaces/kits/napi/screen_runtime/BUILD.gn +++ b/interfaces/kits/napi/screen_runtime/BUILD.gn @@ -70,3 +70,41 @@ ohos_shared_library("screen_napi") { part_name = "window_manager" subsystem_name = "window" } + +ohos_shared_library("screen_kit") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + cfi_vcall_icall_only = true + debug = false + } + sources = [ + "napi/js_screen.cpp", + ] + + configs = [ + ":screen_runtime_config", + "../../../../resources/config/build:coverage_flags", + ] + + deps = [ + "../../../../dm:libdm", + "../../../../utils:libwmutil", + "../../../../utils:libwmutil_base", + ] + + external_deps = [ + "ability_runtime:runtime", + "c_utils:utils", + "graphic_2d:librender_service_base", + "graphic_surface:surface", # use for SurfaceUtils + "hilog:libhilog", + "hitrace:hitrace_meter", + "napi:ace_napi", + ] + + innerapi_tags = [ "platformsdk" ] + part_name = "window_manager" + subsystem_name = "window" +} diff --git a/interfaces/kits/napi/screen_runtime/napi/js_screen.h b/interfaces/kits/napi/screen_runtime/napi/js_screen.h index fb5385e9ad..1156602747 100644 --- a/interfaces/kits/napi/screen_runtime/napi/js_screen.h +++ b/interfaces/kits/napi/screen_runtime/napi/js_screen.h @@ -37,6 +37,7 @@ public: static napi_value SetScreenActiveMode(napi_env env, napi_callback_info info); static napi_value SetOrientation(napi_env env, napi_callback_info info); static napi_value SetDensityDpi(napi_env env, napi_callback_info info); + sptr GetScreen() { return screen_; } private: sptr screen_ = nullptr; -- Gitee From e73c8025a03665cccde3b06e71ebc184de532c3a Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 19 Aug 2025 19:11:24 +0800 Subject: [PATCH 087/109] codecheck clean Signed-off-by: chenpeng --- .../display_ani/include/display_ani.h | 2 + .../display_ani/src/display_ani.cpp | 66 ++++++++++++------- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index 8690219579..3dd1628b50 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -34,6 +34,8 @@ public: static void CreateDisplayAni(sptr display, ani_object displayAni, ani_env* env); void OnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); void OnUnRegisterCallback(ani_env* env, ani_object obj, ani_string type, ani_ref aniCallback); + static ani_status NspBindNativeFunctions(ani_env* env, ani_namespace nsp); + static ani_status ClassBindNativeFunctions(ani_env* env, ani_class displayCls); static ani_boolean TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object displayAniObj); static ani_object TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj); sptr GetDisplay() { return display_; } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 4d0c558bb3..28ad60ba53 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -374,22 +374,8 @@ ani_object DisplayAni::TransferDynamic(ani_env* env, ani_object obj, ani_long na return result; } -extern "C" { -ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +ani_status DisplayAni::NspBindNativeFunctions(ani_env* env, ani_namespace nsp) { - using namespace OHOS::Rosen; - ani_status ret; - ani_env *env; - if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] null env"); - return ANI_NOT_FOUND; - } - ani_namespace nsp; - if ((ret = env->FindNamespace("@ohos.display.display", &nsp)) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); - return ANI_NOT_FOUND; - } - DisplayManagerAni::InitDisplayManagerAni(nsp, env); std::array funcs = { ani_native_function {"isFoldable", ":z", reinterpret_cast(DisplayManagerAni::IsFoldableAni)}, ani_native_function {"getFoldDisplayModeNative", ":i", @@ -413,16 +399,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(DisplayManagerAni::GetAllDisplayPhysicalResolution)}, ani_native_function {"isCaptured", nullptr, reinterpret_cast(DisplayManagerAni::IsCaptured)}, }; - if ((ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()))) { + auto ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()); + if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); return ANI_NOT_FOUND; } + return ANI_OK; +} - ani_class displayCls = nullptr; - if ((ret = env->FindClass("@ohos.display.display.DisplayImpl", &displayCls)) != ANI_OK) { - TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); - return ANI_NOT_FOUND; - } +ani_status DisplayAni::ClassBindNativeFunctions(ani_env* env, ani_class displayCls) +{ std::array methods = { ani_native_function {"getCutoutInfoInternal", "C{@ohos.display.display.CutoutInfo}:", reinterpret_cast(DisplayAni::GetCutoutInfo)}, @@ -439,10 +425,46 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", reinterpret_cast(DisplayAni::TransferDynamic)}, }; - if ((ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size())) != ANI_OK) { + auto ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size()); + if (ANI_OK != ret) { TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); return ANI_NOT_FOUND; } + return ANI_OK; +} + +extern "C" { +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + using namespace OHOS::Rosen; + ani_status ret; + ani_env *env; + if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env"); + return ANI_NOT_FOUND; + } + ani_namespace nsp; + if ((ret = env->FindNamespace("@ohos.display.display", &nsp)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); + return ANI_NOT_FOUND; + } + DisplayManagerAni::InitDisplayManagerAni(nsp, env); + ret = DisplayAni::NspBindNativeFunctions(env, nsp); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); + return ret; + } + + ani_class displayCls = nullptr; + if ((ret = env->FindClass("@ohos.display.display.DisplayImpl", &displayCls)) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] null env %{public}u", ret); + return ANI_NOT_FOUND; + } + ret = DisplayAni::ClassBindNativeFunctions(env, displayCls); + if (ANI_OK != ret) { + TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); + return ret; + } *result = ANI_VERSION_1; return ANI_OK; } -- Gitee From f5782ec101d95a1eba970d07c9722f5b61602170 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 19 Aug 2025 21:09:02 +0800 Subject: [PATCH 088/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_runtime/display_ani/include/display_ani.h | 2 +- .../display_runtime/display_ani/src/display_ani.cpp | 11 +++++++---- .../screen_runtime/screen_ani/include/screen_ani.h | 2 +- .../ani/screen_runtime/screen_ani/src/screen_ani.cpp | 2 +- interfaces/kits/napi/display_runtime/js_display.h | 2 +- interfaces/kits/napi/screen_runtime/napi/js_screen.h | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h index 3dd1628b50..8dd89462d4 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani.h @@ -38,7 +38,7 @@ public: static ani_status ClassBindNativeFunctions(ani_env* env, ani_class displayCls); static ani_boolean TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object displayAniObj); static ani_object TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj); - sptr GetDisplay() { return display_; } + sptr GetDisplay() const { return display_; } private: DMError UnregisterAllDisplayListenerWithType(std::string type); DMError UnregisterDisplayListenerWithType(std::string type, ani_env *env, ani_ref aniCallback); diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 28ad60ba53..046fd7857e 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -317,7 +317,7 @@ void DisplayAni::CreateDisplayAni(sptr display, ani_object displayObj, ani_boolean DisplayAni::TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object displayAniObj) { TLOGI(WmsLogTag::DMS, "begin"); - void *unwrapResult = nullptr; + void* unwrapResult = nullptr; auto ret = arkts_esvalue_unwrap(env, input, &unwrapResult); if (!ret) { TLOGE(WmsLogTag::DMS, "[ANI] fail to unwrap input, %{public}d", ret); @@ -334,7 +334,10 @@ ani_boolean DisplayAni::TransferStatic(ani_env* env, ani_object obj, ani_object } sptr display = jsDisplay->GetDisplay(); - DisplayAniUtils::CvtDisplay(display, env, displayAniObj); + if (ANI_OK != DisplayAniUtils::CvtDisplay(display, env, displayAniObj)) { + TLOGE(WmsLogTag::DMS, "[ANI] convert display failed"); + return false; + } DisplayAni::CreateDisplayAni(display, displayAniObj, env); return true; } @@ -434,11 +437,11 @@ ani_status DisplayAni::ClassBindNativeFunctions(ani_env* env, ani_class displayC } extern "C" { -ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) { using namespace OHOS::Rosen; ani_status ret; - ani_env *env; + ani_env* env; if ((ret = vm->GetEnv(ANI_VERSION_1, &env)) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] null env"); return ANI_NOT_FOUND; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h index c8bd8d8573..4ed7082bb2 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h +++ b/interfaces/kits/ani/screen_runtime/screen_ani/include/screen_ani.h @@ -28,7 +28,7 @@ public: void OnSetDensityDpi(ani_env* env, ani_object obj, ani_double densityDpi); static ani_boolean TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object screenAniObj); static ani_object TransferDynamic(ani_env* env, ani_object obj, ani_long nativeObj); - sptr GetScreen() { return screen_; } + sptr GetScreen() const { return screen_; } private: sptr screen_ = nullptr; diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp index f06da816e9..da23193d54 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp @@ -54,7 +54,7 @@ void ScreenAni::OnSetDensityDpi(ani_env* env, ani_object obj, ani_double density ani_boolean ScreenAni::TransferStatic(ani_env* env, ani_object obj, ani_object input, ani_object screenAniObj) { TLOGI(WmsLogTag::DMS, "begin"); - void *unwrapResult = nullptr; + void* unwrapResult = nullptr; auto ret = arkts_esvalue_unwrap(env, input, &unwrapResult); if (!ret) { TLOGE(WmsLogTag::DMS, "[ANI] fail to unwrap input, ret: %{public}d", ret); diff --git a/interfaces/kits/napi/display_runtime/js_display.h b/interfaces/kits/napi/display_runtime/js_display.h index fd9279eac5..eaa2006b85 100644 --- a/interfaces/kits/napi/display_runtime/js_display.h +++ b/interfaces/kits/napi/display_runtime/js_display.h @@ -78,7 +78,7 @@ public: static napi_value GetDisplayCapability(napi_env env, napi_callback_info info); static napi_value RegisterDisplayManagerCallback(napi_env env, napi_callback_info info); static napi_value UnregisterDisplayManagerCallback(napi_env env, napi_callback_info info); - sptr GetDisplay() { return display_; } + sptr GetDisplay() const { return display_; } private: sptr display_ = nullptr; diff --git a/interfaces/kits/napi/screen_runtime/napi/js_screen.h b/interfaces/kits/napi/screen_runtime/napi/js_screen.h index 1156602747..469dc9de30 100644 --- a/interfaces/kits/napi/screen_runtime/napi/js_screen.h +++ b/interfaces/kits/napi/screen_runtime/napi/js_screen.h @@ -37,7 +37,7 @@ public: static napi_value SetScreenActiveMode(napi_env env, napi_callback_info info); static napi_value SetOrientation(napi_env env, napi_callback_info info); static napi_value SetDensityDpi(napi_env env, napi_callback_info info); - sptr GetScreen() { return screen_; } + sptr GetScreen() const { return screen_; } private: sptr screen_ = nullptr; -- Gitee From 3517420801f3f9721ec43749594d02b3777a4753 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 19 Aug 2025 22:03:50 +0800 Subject: [PATCH 089/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../kits/ani/display_runtime/display_ani/src/display_ani.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 046fd7857e..d3796be815 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -468,6 +468,10 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); return ret; } + if (result != nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] Result is nullptr"); + return ANI_INVALID_ARGS;ANI_INVALID_ARGS; + } *result = ANI_VERSION_1; return ANI_OK; } -- Gitee From 01807ee583913f7c342fec5819f1c639aed329e7 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 19 Aug 2025 22:20:35 +0800 Subject: [PATCH 090/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../ani/display_runtime/display_ani/src/display_ani.cpp | 8 ++++---- .../kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index d3796be815..19ca8af550 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -334,7 +334,7 @@ ani_boolean DisplayAni::TransferStatic(ani_env* env, ani_object obj, ani_object } sptr display = jsDisplay->GetDisplay(); - if (ANI_OK != DisplayAniUtils::CvtDisplay(display, env, displayAniObj)) { + if (DisplayAniUtils::CvtDisplay(display, env, displayAniObj) != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] convert display failed"); return false; } @@ -403,7 +403,7 @@ ani_status DisplayAni::NspBindNativeFunctions(ani_env* env, ani_namespace nsp) ani_native_function {"isCaptured", nullptr, reinterpret_cast(DisplayManagerAni::IsCaptured)}, }; auto ret = env->Namespace_BindNativeFunctions(nsp, funcs.data(), funcs.size()); - if (ANI_OK != ret) { + if (ret != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); return ANI_NOT_FOUND; } @@ -429,7 +429,7 @@ ani_status DisplayAni::ClassBindNativeFunctions(ani_env* env, ani_class displayC reinterpret_cast(DisplayAni::TransferDynamic)}, }; auto ret = env->Class_BindNativeMethods(displayCls, methods.data(), methods.size()); - if (ANI_OK != ret) { + if (ret != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); return ANI_NOT_FOUND; } @@ -453,7 +453,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) } DisplayManagerAni::InitDisplayManagerAni(nsp, env); ret = DisplayAni::NspBindNativeFunctions(env, nsp); - if (ANI_OK != ret) { + if (ret != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] bind namespace fail %{public}u", ret); return ret; } diff --git a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp index da23193d54..d196135073 100644 --- a/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp +++ b/interfaces/kits/ani/screen_runtime/screen_ani/src/screen_ani.cpp @@ -71,7 +71,10 @@ ani_boolean ScreenAni::TransferStatic(ani_env* env, ani_object obj, ani_object i } sptr screen = jsScreen->GetScreen(); - ScreenAniUtils::ConvertScreen(env, screen, screenAniObj); + if (ScreenAniUtils::ConvertScreen(env, screen, screenAniObj) != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] convert screen failed"); + return false; + } return true; } -- Gitee From 576dfb1a7ea009021c2ea2711bd14c7ba2734e86 Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 19 Aug 2025 22:30:16 +0800 Subject: [PATCH 091/109] codeckeck Signed-off-by: chenpeng --- .../kits/ani/display_runtime/display_ani/src/display_ani.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index 19ca8af550..f19a5c63f0 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -470,7 +470,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) } if (result != nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] Result is nullptr"); - return ANI_INVALID_ARGS;ANI_INVALID_ARGS; + return ANI_INVALID_ARGS; } *result = ANI_VERSION_1; return ANI_OK; -- Gitee From bdba40fb8e3f267a0bbe16c718704bb51d6eacab Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 21 Aug 2025 21:07:54 +0800 Subject: [PATCH 092/109] =?UTF-8?q?1=20fix=20window=20is=20nullptr=20error?= =?UTF-8?q?=20code=202=20fix=20islighticon=20isanimationenable=20cannot=20?= =?UTF-8?q?find=20problem=203=20fix=20setsystembarproperties=20crash=204?= =?UTF-8?q?=20fix=20setwindowsystembarenable=20=E6=97=A0=E6=95=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangzilin --- .../window_stage_ani/ets/@ohos.window.ets | 32 ++-- .../window_stage_ani/src/ani_window.cpp | 150 +++++++++++------- .../window_stage_ani/src/ani_window_utils.cpp | 10 +- 3 files changed, 113 insertions(+), 79 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index 7fa63b5245..a36be0a01d 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -732,7 +732,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - statusBarColor: string; + statusBarColor?: string; /** * The light icon of the status bar. @@ -748,7 +748,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - isStatusBarLightIcon: boolean; + isStatusBarLightIcon?: boolean; /** * The content color of the status bar @@ -764,7 +764,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - statusBarContentColor: string; + statusBarContentColor?: string; /** * The color of the navigation bar. @@ -780,7 +780,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - navigationBarColor: string; + navigationBarColor?: string; /** * The light icon of the navigation bar. @@ -796,7 +796,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - isNavigationBarLightIcon: boolean; + isNavigationBarLightIcon?: boolean; /** * The content color of the navigation bar @@ -812,7 +812,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - navigationBarContentColor: string; + navigationBarContentColor?: string; /** * Enable the animation of the status bar. @@ -822,7 +822,7 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - enableStatusBarAnimation: boolean; + enableStatusBarAnimation?: boolean; /** * Enable the animation of the navigation bar. @@ -832,18 +832,18 @@ export interface SystemBarProperties { * @atomicservice * @since 12 */ - enableNavigationBarAnimation: boolean; + enableNavigationBarAnimation?: boolean; } export class SystemBarPropertiesInternal implements SystemBarProperties { - statusBarColor: string = ""; - isStatusBarLightIcon: boolean; - statusBarContentColor: string = ""; - navigationBarColor: string = ""; - isNavigationBarLightIcon: boolean; - navigationBarContentColor: string = ""; - enableStatusBarAnimation: boolean; - enableNavigationBarAnimation: boolean; + statusBarColor?: string; + isStatusBarLightIcon?: boolean; + statusBarContentColor?: string; + navigationBarColor?: string; + isNavigationBarLightIcon?: boolean; + navigationBarContentColor?: string; + enableStatusBarAnimation?: boolean; + enableNavigationBarAnimation?: boolean; } /** diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 73c9bf27a0..e2083f80fa 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -145,6 +145,7 @@ void AniWindow::SetWindowColorSpace(ani_env* env, ani_object obj, ani_long nativ aniWindow->OnSetWindowColorSpace(env, colorSpace); } else { TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } } @@ -587,26 +588,27 @@ void AniWindow::OnSetShadow(ani_env* env, ani_double radius, ani_string color, a void AniWindow::SetWindowPrivacyMode(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isPrivacyMode) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { aniWindow->OnSetWindowPrivacyMode(env, isPrivacyMode); } else { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } } void AniWindow::OnSetWindowPrivacyMode(ani_env* env, ani_boolean isPrivacyMode) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } auto ret = window->SetPrivacyMode(static_cast(isPrivacyMode)); - TLOGI(WmsLogTag::DEFAULT, "[ANI] ret:%{public}d", static_cast(ret)); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ret:%{public}d", static_cast(ret)); } void AniWindow::Recover(ani_env* env, ani_object obj, ani_long nativeObj) @@ -669,6 +671,7 @@ void AniWindow::SetWindowKeepScreenOn(ani_env* env, ani_object obj, ani_long nat AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } aniWindow->OnSetWindowKeepScreenOn(env, isKeepScreenOn); @@ -692,21 +695,22 @@ void AniWindow::OnSetWindowKeepScreenOn(ani_env* env, ani_boolean isKeepScreenOn void AniWindow::SetWaterMarkFlag(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enable) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { aniWindow->OnSetWaterMarkFlag(env, enable); } else { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } } void AniWindow::OnSetWaterMarkFlag(ani_env* env, ani_boolean enable) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } @@ -807,22 +811,24 @@ void AniWindow::OnLoadContent(ani_env* env, ani_string path, ani_object storage) void AniWindow::SetWindowSystemBarEnable(ani_env* env, ani_object obj, ani_long nativeObj, ani_object nameAry) { - TLOGI(WmsLogTag::WMS_MAIN, "[ANI]"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { aniWindow->OnSetWindowSystemBarEnable(env, nameAry); } else { - TLOGE(WmsLogTag::WMS_MAIN, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; } - TLOGI(WmsLogTag::WMS_MAIN, "[ANI] SetWindowSystemBarEnable end"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI] SetWindowSystemBarEnable end"); } void AniWindow::OnSetWindowSystemBarEnable(ani_env* env, ani_object nameAry) { - TLOGI(WmsLogTag::WMS_MAIN, "[ANI]"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } @@ -943,17 +949,18 @@ ani_object AniWindow::OnGetUIContext(ani_env* env) ani_object AniWindow::GetWindowAvoidArea(ani_env* env, ani_object obj, ani_long nativeObj, ani_int type) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] type:%{public}d", static_cast(type)); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI] type:%{public}d", static_cast(type)); AniWindow* aniWindow = reinterpret_cast(nativeObj); - return aniWindow != nullptr ? aniWindow->OnGetWindowAvoidArea(env, type) : nullptr; + return aniWindow != nullptr ? aniWindow->OnGetWindowAvoidArea(env, type) : + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } ani_object AniWindow::OnGetWindowAvoidArea(ani_env* env, ani_int type) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] window is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } AvoidArea avoidArea; @@ -1652,9 +1659,13 @@ ani_int AniWindow::GetWindowDecorHeight(ani_env* env) ani_object AniWindow::SetWindowBackgroundColor(ani_env* env, const std::string& color) { + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetBackgroundColor(color)); if (ret == WmErrorCode::WM_OK) { - TLOGI(WmsLogTag::DEFAULT, "Window [%{public}u, %{public}s] set background color end", + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u, %{public}s] set background color end", windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); return AniWindowUtils::CreateAniUndefined(env); } else { @@ -1945,6 +1956,10 @@ void AniWindow::OnKeepKeyboardOnFocus(ani_env* env, ani_boolean keepKeyboardFlag ani_object AniWindow::SetImmersiveModeEnabledState(ani_env* env, bool enable) { + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "WindowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } if (!WindowHelper::IsMainWindow(windowToken_->GetType()) && !WindowHelper::IsSubWindow(windowToken_->GetType())) { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] OnSetImmersiveModeEnabledState is not allowed since invalid window type"); @@ -2000,34 +2015,36 @@ ani_object AniWindow::SetWindowDecorHeight(ani_env* env, ani_int height) ani_object AniWindow::GetWindowPropertiesSync(ani_env* env) { - wptr weakToken(windowToken_); - TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); - auto weakWindow = weakToken.promote(); - if (weakWindow == nullptr) { - TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); } - - auto objValue = AniWindowUtils::CreateWindowsProperties(env, weakWindow); + auto objValue = AniWindowUtils::CreateWindowsProperties(env, windowToken_); if (objValue == nullptr) { return AniWindowUtils::AniThrowError(env, WMError::WM_ERROR_NULLPTR, "[ANI] Window get properties failed"); } - TLOGI(WmsLogTag::WMS_IMMS, "[ANI] Window [%{public}u, %{public}s] get properties end", - weakWindow->GetWindowId(), weakWindow->GetWindowName().c_str()); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] Window [%{public}u, %{public}s] get properties end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); return objValue; } ani_boolean AniWindow::IsWindowSupportWideGamut(ani_env* env) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } ani_boolean res = static_cast(windowToken_->IsSupportWideGamut()); - TLOGI(WmsLogTag::DEFAULT, "[ANI] Window IsWindowSupportWideGamut end"); return res; } ani_object AniWindow::SetWindowLayoutFullScreen(ani_env* env, ani_boolean isLayoutFullScreen) { if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } @@ -2048,6 +2065,7 @@ void AniWindow::SetSystemBarProperties(ani_env* env, ani_object aniSystemBarProp { if (windowToken_ == nullptr) { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } std::map aniProperties; @@ -2077,7 +2095,7 @@ void AniWindow::SetSystemBarProperties(ani_env* env, ani_object aniSystemBarProp ani_object AniWindow::SetSpecificSystemBarEnabled(ani_env* env, ani_string name, ani_boolean enable, ani_boolean enableAnimation) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] SetSystemBarEnable"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); std::map aniSystemBarProperties; if (!AniWindowUtils::SetSpecificSystemBarEnabled(env, aniSystemBarProperties, name, enable, enableAnimation)) { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] invalid param or argc"); @@ -2090,9 +2108,12 @@ ani_object AniWindow::SetSpecificSystemBarEnabled(ani_env* env, ani_string name, TLOGE(WmsLogTag::WMS_IMMS, "[ANI] invalid param of name"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); } - + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } AniWindowUtils::GetSpecificBarStatus(windowToken_, barName, systemBarProperties, systemBarProperties); - WmErrorCode err = (windowToken_ == nullptr) ? WmErrorCode::WM_ERROR_STATE_ABNORMALLY : WmErrorCode::WM_OK; + WmErrorCode err = WmErrorCode::WM_OK; if (barName.compare("status") == 0) { err = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetSpecificBarProperty( WindowType::WINDOW_TYPE_STATUS_BAR, systemBarProperties.at(WindowType::WINDOW_TYPE_STATUS_BAR))); @@ -2126,6 +2147,7 @@ ani_ref FindAniWindowObject(const std::string& windowName) ani_object AniWindow::Snapshot(ani_env* env) { if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } std::shared_ptr pixelMap = windowToken_->Snapshot(); @@ -2145,6 +2167,7 @@ ani_object AniWindow::Snapshot(ani_env* env) void AniWindow::HideNonSystemFloatingWindows(ani_env* env, ani_boolean shouldHide) { if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "windowToken_ is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } @@ -2493,17 +2516,17 @@ static ani_int WindowSetWindowBackgroundColor(ani_env* env, ani_object obj, ani_ ani_string color) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); std::string colorStr; OHOS::Rosen::AniWindowUtils::GetStdString(env, color, colorStr); - TLOGD(WmsLogTag::DEFAULT, "[ANI] SetWindowBackgroundColor %{public}s", colorStr.c_str()); + TLOGD(WmsLogTag::WMS_ATTRIBUTE, "[ANI] SetWindowBackgroundColor %{public}s", colorStr.c_str()); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } aniWindow->SetWindowBackgroundColor(env, colorStr); - TLOGI(WmsLogTag::DEFAULT, "[ANI] SetWindowBackgroundColor end"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] SetWindowBackgroundColor end"); return ANI_OK; } @@ -2514,8 +2537,9 @@ static ani_int WindowSetImmersiveModeEnabledState(ani_env* env, ani_object obj, using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } aniWindow->SetImmersiveModeEnabledState(env, static_cast(enable)); @@ -2550,12 +2574,12 @@ static ani_int WindowSetWindowDecorHeight(ani_env* env, ani_object obj, ani_long static ani_object WindowGetWindowProperties(ani_env* env, ani_object obj, ani_long nativeObj) { + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); using namespace OHOS::Rosen; AniWindow* aniWindow = reinterpret_cast(nativeObj); - TLOGD(WmsLogTag::DEFAULT, "[ANI], %{public}p", aniWindow); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } return aniWindow->GetWindowPropertiesSync(env); } @@ -2563,13 +2587,13 @@ static ani_object WindowGetWindowProperties(ani_env* env, ani_object obj, ani_lo static ani_boolean WindowIsWindowSupportWideGamut(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return false; } - TLOGI(WmsLogTag::WMS_IMMS, "[ANI] WindowIsWindowSupportWideGamut end"); return aniWindow->IsWindowSupportWideGamut(env); } @@ -2579,8 +2603,9 @@ static ani_int WindowSetWindowLayoutFullScreen(ani_env* env, ani_object obj, using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } aniWindow->SetWindowLayoutFullScreen(env, isLayoutFullScreen); @@ -2594,8 +2619,9 @@ static ani_int WindowSetSystemBarProperties(ani_env* env, ani_object obj, using namespace OHOS::Rosen; TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } aniWindow->SetSystemBarProperties(env, aniSystemBarProperties); @@ -2606,25 +2632,26 @@ static ani_int WindowSetSpecificSystemBarEnabled(ani_env* env, ani_object obj, a ani_string name, ani_boolean enable, ani_boolean enableAnimation) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { + if (aniWindow == nullptr) { TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } aniWindow->SetSpecificSystemBarEnabled(env, name, enable, enableAnimation); - TLOGI(WmsLogTag::DEFAULT, "[ANI] SetSpecificSystemBarEnabled end"); + TLOGI(WmsLogTag::WMS_IMMS, "[ANI] SetSpecificSystemBarEnabled end"); return ANI_OK; } static ani_object Snapshot(ani_env* env, ani_object obj, ani_long nativeObj) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken is nullptr"); - return AniWindowUtils::CreateAniUndefined(env); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } return aniWindow->Snapshot(env); } @@ -2632,10 +2659,11 @@ static ani_object Snapshot(ani_env* env, ani_object obj, ani_long nativeObj) static void HideNonSystemFloatingWindows(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean shouldHide) { using namespace OHOS::Rosen; - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); - if (aniWindow == nullptr || aniWindow->GetWindow() == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken is nullptr"); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } aniWindow->HideNonSystemFloatingWindows(env, shouldHide); diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 6e75336571..78af9b1c9f 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -65,8 +65,8 @@ ani_status AniWindowUtils::GetStdString(ani_env *env, ani_string ani_str, std::s ani_status AniWindowUtils::GetStdStringVector(ani_env* env, ani_object ary, std::vector& result) { - ani_double length; - ani_status ret = env->Object_GetPropertyByName_Double(ary, "length", &length); + ani_int length; + ani_status ret = env->Object_GetPropertyByName_Int(ary, "length", &length); if (ret != ANI_OK) { return ret; } @@ -938,6 +938,12 @@ uint32_t AniWindowUtils::GetColorFromAni(ani_env* env, { ani_ref result; env->Object_GetPropertyByName_Ref(aniObject, name, &result); + ani_boolean isColorUndefined; + env->Reference_IsUndefined(result, &isColorUndefined); + if (isColorUndefined) { + TLOGE(WmsLogTag::WMS_IMMS, "the color is undefined"); + } + ani_string aniColor = reinterpret_cast(result); std::string colorStr; GetStdString(env, aniColor, colorStr); -- Gitee From 46df496fcbcffa6b63ebf010c079e69f95ce8d0b Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 21 Aug 2025 21:28:28 +0800 Subject: [PATCH 093/109] fix some log tag and add systembarstyle interface Signed-off-by: wangzilin --- .../window_stage_ani/ets/@ohos.window.ets | 3 +++ .../window_stage_ani/src/ani_window.cpp | 24 +++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index a36be0a01d..ebc06c22f1 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1302,6 +1302,9 @@ export interface WindowDensityInfo { defaultDensity: double; customDensity: double; } +export interface SystemBarStyle { + statusBarContentColor?: string; +} export interface AvoidAreaOptions { type: AvoidAreaType; diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index e2083f80fa..7c89fc5883 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -139,12 +139,12 @@ ani_object AniWindow::NativeTransferDynamic(ani_env* aniEnv, ani_class cls, ani_ void AniWindow::SetWindowColorSpace(ani_env* env, ani_object obj, ani_long nativeObj, ani_int colorSpace) { - TLOGI(WmsLogTag::DEFAULT, "[ANI] colorSpace:%{public}d", static_cast(colorSpace)); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] colorSpace:%{public}d", static_cast(colorSpace)); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow != nullptr) { aniWindow->OnSetWindowColorSpace(env, colorSpace); } else { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } } @@ -153,19 +153,19 @@ void AniWindow::OnSetWindowColorSpace(ani_env* env, ani_int colorSpace) { if (static_cast(colorSpace) > static_cast(ColorSpace::COLOR_SPACE_WIDE_GAMUT) || static_cast(colorSpace) < static_cast(ColorSpace::COLOR_SPACE_DEFAULT)) { - TLOGE(WmsLogTag::DEFAULT, "ColorSpace %{public}u invalid!", static_cast(colorSpace)); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "ColorSpace %{public}u invalid!", static_cast(colorSpace)); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); return; } - TLOGI(WmsLogTag::DEFAULT, "[ANI] colorSpace:%{public}d", static_cast(colorSpace)); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] colorSpace:%{public}d", static_cast(colorSpace)); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI]window is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI]window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } window->SetColorSpace(static_cast(colorSpace)); - TLOGI(WmsLogTag::DEFAULT, "[ANI] SetWindowColorSpace end"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] SetWindowColorSpace end"); } void AniWindow::SetPreferredOrientation(ani_env* env, ani_object obj, ani_long nativeObj, ani_int orientation) @@ -667,23 +667,23 @@ void AniWindow::OnSetUIContent(ani_env* env, ani_string path) void AniWindow::SetWindowKeepScreenOn(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isKeepScreenOn) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } aniWindow->OnSetWindowKeepScreenOn(env, isKeepScreenOn); - TLOGI(WmsLogTag::DEFAULT, "[ANI] SetWindowKeepScreenOn end"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] SetWindowKeepScreenOn end"); } void AniWindow::OnSetWindowKeepScreenOn(ani_env* env, ani_boolean isKeepScreenOn) { - TLOGI(WmsLogTag::DEFAULT, "[ANI]"); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); auto window = GetWindow(); if (window == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] window is nullptr"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] window is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } @@ -2635,7 +2635,7 @@ static ani_int WindowSetSpecificSystemBarEnabled(ani_env* env, ani_object obj, a TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr) { - TLOGE(WmsLogTag::DEFAULT, "[ANI] windowToken_ is nullptr"); + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return ANI_ERROR; } -- Gitee From da578fbcbb6cdc163b4ef00d0adcadfabfe6b3e3 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 21 Aug 2025 22:08:25 +0800 Subject: [PATCH 094/109] fix bug Signed-off-by: wangzilin --- .../kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 7c89fc5883..463a546131 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -2574,8 +2574,8 @@ static ani_int WindowSetWindowDecorHeight(ani_env* env, ani_object obj, ani_long static ani_object WindowGetWindowProperties(ani_env* env, ani_object obj, ani_long nativeObj) { - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindow* aniWindow = reinterpret_cast(nativeObj); if (aniWindow == nullptr) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); -- Gitee From 89c8ec2e4a58b4f9cccef03e41b48638f862c484 Mon Sep 17 00:00:00 2001 From: liaoqingxing Date: Thu, 21 Aug 2025 22:36:33 +0800 Subject: [PATCH 095/109] bugfix Signed-off-by: liaoqingxing --- .../window_stage_ani/src/ani_window_manager.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 937b94294b..792b210516 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -301,11 +301,15 @@ bool ParseConfigOption(ani_env* env, ani_object configuration, WindowOption &opt ani_ref result; env->Object_GetPropertyByName_Ref(configuration, "title", &result); - ani_string aniDialogTitle = reinterpret_cast(result); - std::string dialogTitle; - AniWindowUtils::GetStdString(env, aniDialogTitle, dialogTitle); - TLOGI(WmsLogTag::DEFAULT, "[ANI] dialogTitle: %{public}s", dialogTitle.c_str()); - option.SetDialogTitle(dialogTitle); + ani_boolean isTitleUndefined = false; + env->Reference_IsUndefined(result, &isTitleUndefined); + if (!isTitleUndefined) { + ani_string aniDialogTitle = reinterpret_cast(result); + std::string dialogTitle; + AniWindowUtils::GetStdString(env, aniDialogTitle, dialogTitle); + TLOGI(WmsLogTag::DEFAULT, "[ANI] dialogTitle: %{public}s", dialogTitle.c_str()); + option.SetDialogTitle(dialogTitle); + } env->Object_GetPropertyByName_Ref(configuration, "ctx", &result); ani_object aniContextPtr = reinterpret_cast(result); -- Gitee From 279e7fce94ebe22b5879a103000bec701fd34174 Mon Sep 17 00:00:00 2001 From: travislgd Date: Thu, 21 Aug 2025 11:57:11 +0800 Subject: [PATCH 096/109] display_ Signed-off-by: travislgd --- .../display_ani/ets/@ohos.display.ets | 67 +++++++++++++++---- .../display_ani/include/display_ani_utils.h | 6 +- .../display_ani/src/display_ani.cpp | 2 +- .../display_ani/src/display_ani_utils.cpp | 48 +++++++++++-- 4 files changed, 103 insertions(+), 20 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets index 77f843a026..d634b2b611 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets +++ b/interfaces/kits/ani/display_runtime/display_ani/ets/@ohos.display.ets @@ -138,10 +138,22 @@ export enum FoldStatus { FOLD_STATUS_FOLDED, - FOLD_STATUS_HALF_FOLDED + FOLD_STATUS_HALF_FOLDED, + + FOLD_STATUS_EXPANDED_WITH_SECOND_EXPANDED = 11, + + FOLD_STATUS_EXPANDED_WITH_SECOND_HALF_FOLDED = 21, + + FOLD_STATUS_FOLDED_WITH_SECOND_EXPANDED = 12, + + FOLD_STATUS_FOLDED_WITH_SECOND_HALF_FOLDED = 22, + + FOLD_STATUS_HALF_FOLDED_WITH_SECOND_EXPANDED = 13, + + FOLD_STATUS_HALF_FOLDED_WITH_SECOND_HALF_FOLDED = 23 } -enum DisplayState { +export enum DisplayState { STATE_UNKNOWN = 0, STATE_OFF, @@ -157,6 +169,26 @@ enum DisplayState { STATE_ON_SUSPEND } +export enum ScreenShape { + + RECTANGLE = 0, + + ROUND = 1 +} + +export enum DisplaySourceMode { + + NONE = 0, + + MAIN = 1, + + MIRROR = 2, + + EXTEND = 3, + + ALONE = 4 +} + export interface Display { id: long; @@ -190,10 +222,20 @@ export interface Display { yDPI: double; + screenShape?: ScreenShape; + colorSpaces: Array; hdrFormats: Array; + sourceMode?:DisplaySourceMode; + + x?: long; + + y?: long; + + supportedRefreshRates?: Array; + getCutoutInfo(callback: AsyncCallback): void; getCutoutInfo(): Promise; @@ -215,6 +257,7 @@ export class DisplayImpl implements Display { constructor() { this.colorSpaces = new Array(); this.hdrFormats = new Array(); + this.supportedRefreshRates = new Array(); } id: long; @@ -224,7 +267,6 @@ export class DisplayImpl implements Display { alive: boolean; state: DisplayState; - state_: int; refreshRate: int; @@ -241,7 +283,6 @@ export class DisplayImpl implements Display { densityDPI: double; orientation: Orientation; - orientation_: int; densityPixels: double; @@ -251,10 +292,20 @@ export class DisplayImpl implements Display { yDPI: double; + screenShape?: ScreenShape; + colorSpaces: Array; hdrFormats: Array; + sourceMode?: DisplaySourceMode; + + x?: long; + + y?: long; + + supportedRefreshRates?: Array; + displayRef: long; setDisplayRef(nativeObj : long) : void{ @@ -339,8 +390,6 @@ export class DisplayImpl implements Display { let ret = false; if (display_input !== ESValue.Undefined) { ret = DisplayImpl.nativeTransferStatic(display_input, display as Object); - display.state = display.state_ as DisplayState; - display.orientation = display.orientation_ as Orientation; } if (!ret) { return {}; @@ -416,8 +465,6 @@ export native function getCurrentFoldCreaseRegionNative(foldCreaseRegion: object export function getDisplayByIdSync(displayId: long): Display { let display = new DisplayImpl(); getDisplayByIdSyncNative(display as object, displayId); - display.state = display.state_ as DisplayState; - display.orientation = display.orientation_ as Orientation; return display; } @@ -426,8 +473,6 @@ export native function getDisplayByIdSyncNative(obj: object, displayId: long): v export function getDefaultDisplaySync(): Display { let display = new DisplayImpl(); getDefaultDisplaySyncNative(display as object); - display.state = display.state_ as DisplayState; - display.orientation = display.orientation_ as Orientation; return display; } @@ -474,8 +519,6 @@ function minusDisplayArray(displayArr: Array): void { break; } let dp = displayArr[i] as DisplayImpl; - dp.state = dp.state_ as DisplayState; - dp.orientation = dp.orientation_ as Orientation; } displayArr.splice(i); } diff --git a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h index 1c4a9006b7..20d54fed94 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h +++ b/interfaces/kits/ani/display_runtime/display_ani/include/display_ani_utils.h @@ -37,6 +37,8 @@ static void ConvertWaterArea(WaterfallDisplayAreaRects waterfallDisplayAreaRects static void ConvertDisplayPhysicalResolution(std::vector &displayPhysicalArray, ani_object arrayObj, ani_env *env); +static ani_enum_item CreateAniEnum(ani_env* env, const char* enum_descriptor, ani_size index); + static ani_status CvtDisplay(sptr display, ani_env* env, ani_object obj); static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); @@ -53,10 +55,10 @@ static void CreateAniArrayDouble(ani_env* env, ani_size size, ani_array_double * static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* result); -static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, +static ani_status CallAniFunctionVoid(ani_env* env, const char* ns, const char* fn, const char* signature, ...); -static ani_object CreateRectObject(ani_env *env); +static ani_object CreateRectObject(ani_env* env); }; } } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp index f19a5c63f0..5e9bb5b478 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani.cpp @@ -468,7 +468,7 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) TLOGE(WmsLogTag::DMS, "[ANI] bind class fail %{public}u", ret); return ret; } - if (result != nullptr) { + if (result == nullptr) { TLOGE(WmsLogTag::DMS, "[ANI] Result is nullptr"); return ANI_INVALID_ARGS; } diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp index ba7ed9331d..d0365aaa9f 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_utils.cpp @@ -96,9 +96,26 @@ void DisplayAniUtils::ConvertDisplayPhysicalResolution(std::vectorFindEnum(enum_descriptor, &enumType); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] Failed to find enum, %{public}s", enum_descriptor); + return nullptr; + } + ani_enum_item enumItem; + env->Enum_GetEnumItemByIndex(enumType, index, &enumItem); + return enumItem; +} + ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_object obj) { sptr info = display->GetDisplayInfoWithCache(); + if (info == nullptr) { + TLOGE(WmsLogTag::DMS, "[ANI] Failed to GetDisplayInfo"); + return ANI_ERROR; + } int setfieldid = env->Object_SetFieldByName_Long(obj, "id", info->GetDisplayId()); if (ANI_OK != setfieldid) { TLOGE(WmsLogTag::DMS, "[ANI] set id failed: %{public}d", setfieldid); @@ -111,9 +128,11 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Ref(obj, "name", str); env->Object_SetFieldByName_Boolean(obj, "alive", info->GetAliveStatus()); if (NATIVE_TO_JS_DISPLAY_STATE_MAP.count(info->GetDisplayState()) != 0) { - env->Object_SetFieldByName_Int(obj, "state_", static_cast(info->GetDisplayState())); + env->Object_SetFieldByName_Ref(obj, "state", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplayState", static_cast(info->GetDisplayState()))); } else { - env->Object_SetFieldByName_Int(obj, "state_", 0); + env->Object_SetFieldByName_Ref(obj, "state", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplayState", static_cast(0))); } env->Object_SetFieldByName_Int(obj, "refreshRate", info->GetRefreshRate()); env->Object_SetFieldByName_Int(obj, "rotation", static_cast(info->GetRotation())); @@ -126,14 +145,27 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ env->Object_SetFieldByName_Long(obj, "availableWidth", info->GetAvailableWidth()); env->Object_SetFieldByName_Long(obj, "availableHeight", info->GetAvailableHeight()); env->Object_SetFieldByName_Double(obj, "densityDPI", info->GetVirtualPixelRatio() * DOT_PER_INCH); - env->Object_SetFieldByName_Int(obj, "orientation_", static_cast(info->GetDisplayOrientation())); + env->Object_SetFieldByName_Ref(obj, "orientation", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.Orientation", static_cast(info->GetDisplayOrientation()))); env->Object_SetFieldByName_Double(obj, "densityPixels", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "scaledDensity", info->GetVirtualPixelRatio()); env->Object_SetFieldByName_Double(obj, "xDPI", info->GetXDpi()); env->Object_SetFieldByName_Double(obj, "yDPI", info->GetYDpi()); + env->Object_SetFieldByName_Ref(obj, "screenShape", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.ScreenShape", static_cast(info->GetScreenShape()))); + if (info->GetDisplaySourceMode() == DisplaySourceMode::MAIN || + info->GetDisplaySourceMode() == DisplaySourceMode::EXTEND) { + env->Object_SetFieldByName_Long(obj, "x", info->GetX()); + env->Object_SetFieldByName_Long(obj, "y", info->GetY()); + } else { + env->Object_SetFieldByName_Ref(obj, "x", DisplayAniUtils::CreateAniUndefined(env)); + env->Object_SetFieldByName_Ref(obj, "y", DisplayAniUtils::CreateAniUndefined(env)); + } + env->Object_SetFieldByName_Ref(obj, "sourceMode", DisplayAniUtils::CreateAniEnum( + env, "@ohos.display.display.DisplaySourceMode", static_cast(info->GetDisplaySourceMode()))); auto colorSpaces = info->GetColorSpaces(); auto hdrFormats = info->GetHdrFormats(); - TLOGI(WmsLogTag::DMS, "[ANI] colorSpaces(0) %{public}d", (int)colorSpaces.size()); + auto supportedRefreshRates = info->GetSupportedRefreshRate(); if (colorSpaces.size() != 0) { ani_array_int colorSpacesAni; CreateAniArrayInt(env, colorSpaces.size(), &colorSpacesAni, colorSpaces); @@ -144,6 +176,12 @@ ani_status DisplayAniUtils::CvtDisplay(sptr display, ani_env* env, ani_ CreateAniArrayInt(env, hdrFormats.size(), &hdrFormatsAni, hdrFormats); env->Object_SetFieldByName_Ref(obj, "hdrFormats", static_cast(hdrFormatsAni)); } + if (supportedRefreshRates.size() != 0) { + ani_array_int supportedRefreshRatesAni; + CreateAniArrayInt(env, hdrFormats.size(), &supportedRefreshRatesAni, supportedRefreshRates); + env->Object_SetFieldByName_Ref(obj, "supportedRefreshRates", + static_cast(supportedRefreshRatesAni)); + } return ANI_OK; } @@ -258,7 +296,7 @@ ani_status DisplayAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, ani_object DisplayAniUtils::CreateRectObject(ani_env *env) { ani_class aniClass{}; - ani_status status = env->FindClass("L@ohos/display/display/RectImpl;", &aniClass); + ani_status status = env->FindClass("@ohos.display.display.RectImpl", &aniClass); if (status != ANI_OK) { TLOGE(WmsLogTag::DMS, "[ANI] class not found, status:%{public}d", static_cast(status)); return nullptr; -- Gitee From 58bee142a19b5f07b87dcdec199269952a3c9688 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Fri, 22 Aug 2025 12:18:55 +0800 Subject: [PATCH 097/109] fix bug Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/src/ani_window_utils.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 78af9b1c9f..32699fd997 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -941,7 +941,8 @@ uint32_t AniWindowUtils::GetColorFromAni(ani_env* env, ani_boolean isColorUndefined; env->Reference_IsUndefined(result, &isColorUndefined); if (isColorUndefined) { - TLOGE(WmsLogTag::WMS_IMMS, "the color is undefined"); + TLOGI(WmsLogTag::WMS_IMMS, "the color is undefined, return default"); + return defaultColor; } ani_string aniColor = reinterpret_cast(result); -- Gitee From 81553bb81b4a422fe5ff555e46e88fb02af61134 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 23 Aug 2025 15:11:11 +0800 Subject: [PATCH 098/109] fix blue yellow Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/src/ani_window.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 463a546131..309a7d7c09 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -607,8 +607,11 @@ void AniWindow::OnSetWindowPrivacyMode(ani_env* env, ani_boolean isPrivacyMode) AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - auto ret = window->SetPrivacyMode(static_cast(isPrivacyMode)); - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ret:%{public}d", static_cast(ret)); + auto ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetPrivacyMode(static_cast(isPrivacyMode))); + if (ret != WmErrorCode::WM_OK) { + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ret:%{public}d", static_cast(ret)); + AniWindowUtils::AniThrowError(env, ret); + } } void AniWindow::Recover(ani_env* env, ani_object obj, ani_long nativeObj) @@ -2018,7 +2021,7 @@ ani_object AniWindow::GetWindowPropertiesSync(ani_env* env) TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); if (windowToken_ == nullptr) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } auto objValue = AniWindowUtils::CreateWindowsProperties(env, windowToken_); if (objValue == nullptr) { -- Gitee From 3b6c40e2cdfec212a90fb0f3d0ab2e768cffa973 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 23 Aug 2025 16:33:04 +0800 Subject: [PATCH 099/109] fix bug Signed-off-by: wangzilin --- .../kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 309a7d7c09..bcab4269ce 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -2115,7 +2115,7 @@ ani_object AniWindow::SetSpecificSystemBarEnabled(ani_env* env, ani_string name, TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } - AniWindowUtils::GetSpecificBarStatus(windowToken_, barName, systemBarProperties, systemBarProperties); + AniWindowUtils::GetSpecificBarStatus(windowToken_, barName, aniSystemBarProperties, systemBarProperties); WmErrorCode err = WmErrorCode::WM_OK; if (barName.compare("status") == 0) { err = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetSpecificBarProperty( -- Gitee From eeab59ca67b5119095c60d3e764fcf0fc67e3a17 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 23 Aug 2025 17:57:45 +0800 Subject: [PATCH 100/109] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/ets/@ohos.window.ets | 1 + .../kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets index ebc06c22f1..c9ebcb9dd1 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/ets/@ohos.window.ets @@ -1302,6 +1302,7 @@ export interface WindowDensityInfo { defaultDensity: double; customDensity: double; } + export interface SystemBarStyle { statusBarContentColor?: string; } diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index bcab4269ce..41fe8a8921 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -609,7 +609,7 @@ void AniWindow::OnSetWindowPrivacyMode(ani_env* env, ani_boolean isPrivacyMode) } auto ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetPrivacyMode(static_cast(isPrivacyMode))); if (ret != WmErrorCode::WM_OK) { - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ret:%{public}d", static_cast(ret)); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ret:%{public}d", static_cast(ret)); AniWindowUtils::AniThrowError(env, ret); } } -- Gitee From da131afb12163b8daadd2ba5bbb89c988c3039ce Mon Sep 17 00:00:00 2001 From: wangzilin Date: Sat, 23 Aug 2025 18:36:58 +0800 Subject: [PATCH 101/109] fix bug Signed-off-by: wangzilin --- .../kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp index 41fe8a8921..308f3fb9c4 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window.cpp @@ -2077,6 +2077,7 @@ void AniWindow::SetSystemBarProperties(ani_env* env, ani_object aniSystemBarProp if (!AniWindowUtils::SetSystemBarPropertiesFromAni(env, aniProperties, aniSystemBarPropertyFlags, aniSystemBarProperties, windowToken_)) { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] Failed to convert parameter to systemBarProperties"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); return; } -- Gitee From d34b3a20777f7c9207e11ad7ccbe4f11ca38838e Mon Sep 17 00:00:00 2001 From: chenpeng Date: Mon, 25 Aug 2025 20:30:10 +0800 Subject: [PATCH 102/109] =?UTF-8?q?bugFix:=20screenShot=20save=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3option=E4=B8=AD=E7=9A=84=E5=8F=98=E9=87=8F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=BA=E5=8F=AF=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../display_ani/src/display_ani_manager.cpp | 3 +- .../screenshot_ani/ets/@ohos.screenshot.ets | 24 +-- .../include/screenshot_ani_utils.h | 23 ++- .../src/screenshot_ani_manager.cpp | 10 +- .../src/screenshot_ani_utils.cpp | 161 +++++++++++++++--- 5 files changed, 174 insertions(+), 47 deletions(-) diff --git a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp index 68aef86c76..2fd1aba528 100644 --- a/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp +++ b/interfaces/kits/ani/display_runtime/display_ani/src/display_ani_manager.cpp @@ -159,6 +159,7 @@ void DisplayManagerAni::GetDisplayByIdSyncAni(ani_env* env, ani_object obj, ani_ TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (displayId < 0) { TLOGE(WmsLogTag::DMS, "[ANI] Invalid displayId, less than 0"); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Invalid displayId"); return; } sptr display = SingletonContainer::Get().GetDisplayById(static_cast(displayId)); @@ -428,7 +429,7 @@ ani_boolean DisplayManagerAni::HasPrivateWindow(ani_env* env, ani_long displayId bool hasPrivateWindow = false; if (displayId < 0) { TLOGE(WmsLogTag::DMS, "Invalid displayId: %{public}" PRId64, displayId); - AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_ILLEGAL_PARAM, "Invalid displayId"); + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "Invalid displayId"); return hasPrivateWindow; } DmErrorCode errCode = DM_JS_TO_ERROR_CODE_MAP.at( diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets index ddc95de2a2..f9d4ae7a90 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/ets/@ohos.screenshot.ets @@ -59,31 +59,31 @@ export function save(options?: ScreenshotOptions): Promise { native function saveSync(screenshotOptions?: ScreenshotOptions): image.PixelMap; export interface ScreenshotOptions { - screenRect: Rect; + screenRect?: Rect; - imageSize: Size; + imageSize?: Size; - rotation: int; + rotation?: int; - displayId: long; + displayId?: long; - isNotificationNeeded: boolean; + isNotificationNeeded?: boolean; - isCaptureFullOfScreen: boolean; + isCaptureFullOfScreen?: boolean; } export class ScreenshotOptionsImpl implements ScreenshotOptions{ - screenRect: Rect; + screenRect?: Rect; - imageSize: Size; + imageSize?: Size; - rotation: int; + rotation?: int; - displayId: long; + displayId?: long; - isNotificationNeeded: boolean; + isNotificationNeeded?: boolean; - isCaptureFullOfScreen: boolean; + isCaptureFullOfScreen?: boolean; } export interface Size { diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h index 8fc440623c..a3e01fea94 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h @@ -25,22 +25,27 @@ namespace OHOS::Rosen { class ScreenshotAniUtils { public: -static ani_status GetStdString(ani_env *env, ani_string ani_str, std::string &result); +static ani_status GetStdString(ani_env* env, ani_string ani_str, std::string& result); static ani_object CreateAniUndefined(ani_env* env); static ani_status GetAniString(ani_env* env, const std::string& str, ani_string* result); -static ani_status CallAniFunctionVoid(ani_env *env, const char* ns, +static ani_status CallAniFunctionVoid(ani_env* env, const char* ns, const char* fn, const char* signature, ...); -static void ConvertScreenshot(ani_env *env, std::shared_ptr image, ani_object obj); - -static void GetScreenshotParam(ani_env *env, std::unique_ptr ¶m, ani_object options); - -static void GetScreenshotSize(ani_env *env, std::unique_ptr ¶m, ani_object options); - -static void GetScreenshotRect(ani_env *env, std::unique_ptr ¶m, ani_object options); +static void ConvertScreenshot(ani_env* env, std::shared_ptr image, ani_object obj); + +static ani_status GetScreenshotParam(ani_env* env, std::unique_ptr& param, ani_object options); + +static ani_status GetScreenshotSize(ani_env* env, std::unique_ptr& param, ani_object options); + +static ani_status GetScreenshotRect(ani_env* env, std::unique_ptr& param, ani_object options); + +static ani_status ReadOptionalField(ani_env* env, ani_object obj, const char* fieldName, ani_ref& ref); +static ani_status ReadOptionalLongField(ani_env* env, ani_object obj, const char* fieldName, ani_long& value); +static ani_status ReadOptionalIntField(ani_env* env, ani_object obj, const char* fieldName, int& value); +static ani_status ReadOptionalBoolField(ani_env* env, ani_object obj, const char* fieldName, bool& value); }; } #endif \ No newline at end of file diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp index 0a8486b56e..08d80a7595 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_manager.cpp @@ -39,6 +39,7 @@ void ScreenshotManagerAni::InitScreenshotManagerAni(ani_namespace nsp, ani_env* ani_object ScreenshotManagerAni::Save(ani_env* env, ani_object options) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); auto param = std::make_unique(); if (param == nullptr) { TLOGI(WmsLogTag::DMS, "Create param failed."); @@ -50,14 +51,18 @@ ani_object ScreenshotManagerAni::Save(ani_env* env, ani_object options) param->validInputParam = true; if (!optionsUndefined) { param->useInputOption = true; - ScreenshotAniUtils::GetScreenshotParam(env, param, options); + ani_status ret = ScreenshotAniUtils::GetScreenshotParam(env, param, options); + if (ret != ANI_OK) { + AniErrUtils::ThrowBusinessError(env, DmErrorCode::DM_ERROR_INVALID_PARAM, "get screen shot param failed"); + return nullptr; + } } param->isPick = false; GetScreenshot(env, param); if (param->wret != DmErrorCode::DM_OK) { if (param->wret == DmErrorCode::DM_ERROR_NO_PERMISSION || param->wret == DmErrorCode::DM_ERROR_INVALID_PARAM || - param->wret == DmErrorCode::DM_ERROR_DEVICE_NOT_SUPPORT || + param->wret == DmErrorCode::DM_ERROR_NOT_SYSTEM_APP || param->wret == DmErrorCode::DM_ERROR_SYSTEM_INNORMAL) { AniErrUtils::ThrowBusinessError(env, param->wret, param->errMessage); } @@ -72,6 +77,7 @@ ani_object ScreenshotManagerAni::Save(ani_env* env, ani_object options) void ScreenshotManagerAni::GetScreenshot(ani_env *env, std::unique_ptr ¶m) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (!param->validInputParam) { TLOGI(WmsLogTag::DMS, "Get Screenshot invalidInputParam"); param->image = nullptr; diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp index 034dd1332e..ce0871813f 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -23,7 +23,7 @@ #include "refbase.h" namespace OHOS::Rosen { -ani_status ScreenshotAniUtils::GetStdString(ani_env *env, ani_string ani_str, std::string &result) +ani_status ScreenshotAniUtils::GetStdString(ani_env* env, ani_string ani_str, std::string& result) { ani_size strSize; ani_status ret = env->String_GetUTF8Size(ani_str, &strSize); @@ -54,12 +54,12 @@ ani_status ScreenshotAniUtils::GetAniString(ani_env* env, const std::string& str return env->String_NewUTF8(str.c_str(), static_cast(str.size()), result); } -void ScreenshotAniUtils::ConvertScreenshot(ani_env *env, std::shared_ptr image, ani_object obj) +void ScreenshotAniUtils::ConvertScreenshot(ani_env* env, std::shared_ptr image, ani_object obj) { return; } -ani_status ScreenshotAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, +ani_status ScreenshotAniUtils::CallAniFunctionVoid(ani_env* env, const char* ns, const char* fn, const char* signature, ...) { TLOGI(WmsLogTag::DEFAULT, "[ANI] begin"); @@ -90,32 +90,71 @@ ani_status ScreenshotAniUtils::CallAniFunctionVoid(ani_env *env, const char* ns, return ret; } -void ScreenshotAniUtils::GetScreenshotParam(ani_env *env, std::unique_ptr ¶m, ani_object options) +ani_status ScreenshotAniUtils::GetScreenshotParam(ani_env* env, std::unique_ptr& param, ani_object options) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (param == nullptr) { TLOGI(WmsLogTag::DMS, "[ANI] null param"); - return; + return ANI_INVALID_ARGS; } ani_long displayId = 0; - env->Object_GetPropertyByName_Long(options, "displayId", &displayId); + ani_status ret = ReadOptionalLongField(env, options, "displayId", displayId); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get displayId failed"); + return ret; + } param->option.displayId = static_cast(displayId); - ani_int rotation = 0; - env->Object_GetPropertyByName_Int(options, "rotation", &rotation); - param->option.rotation = static_cast(rotation); - ani_boolean isNeedNotify = true; - env->Object_GetPropertyByName_Boolean(options, "isNotificationNeeded", &isNeedNotify); - param->option.isNeedNotify = static_cast(isNeedNotify); - ani_boolean isCaptureFullOfScreen = false; - env->Object_GetPropertyByName_Boolean(options, "isCaptureFullOfScreen", &isCaptureFullOfScreen); - param->option.isCaptureFullOfScreen = static_cast(isCaptureFullOfScreen); - GetScreenshotSize(env, param, options); - GetScreenshotRect(env, param, options); + + ret = ReadOptionalIntField(env, options, "rotation", param->option.rotation); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get rotation failed"); + return ret; + } + + ret = ReadOptionalBoolField(env, options, "isNotificationNeeded", param->option.isNeedNotify); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get isNotificationNeeded failed"); + return ret; + } + + ret = ReadOptionalBoolField(env, options, "isCaptureFullOfScreen", param->option.isCaptureFullOfScreen); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get isCaptureFullOfScreen failed"); + return ret; + } + + ret = GetScreenshotSize(env, param, options); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get screenshot size failed"); + return ret; + } + ret = GetScreenshotRect(env, param, options); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get screenshot rect failed"); + return ret; + } + return ANI_OK; } - -void ScreenshotAniUtils::GetScreenshotSize(ani_env *env, std::unique_ptr ¶m, ani_object options) + +ani_status ScreenshotAniUtils::GetScreenshotSize(ani_env* env, std::unique_ptr& param, ani_object options) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_ref obj; - env->Object_GetPropertyByName_Ref(options, "imageSize", &obj); + ani_status ret = env->Object_GetPropertyByName_Ref(options, "imageSize", &obj); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get imageSize failed"); + return ret; + } + ani_boolean isUndefRes = false; + ret = env->Reference_IsUndefined(obj, &isUndefRes); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] check imageSize is undefined failed"); + return ret; + } + if (isUndefRes) { + TLOGI(WmsLogTag::DMS, "[ANI] imageSize is undefined"); + return ANI_OK; + } ani_long width; ani_long height; env->Object_GetPropertyByName_Long(static_cast(obj), "width", &width); @@ -124,12 +163,28 @@ void ScreenshotAniUtils::GetScreenshotSize(ani_env *env, std::unique_ptr param->option.size.height = static_cast(height); TLOGI(WmsLogTag::DMS, "[ANI] get imageSize width = %{public}d, height = %{public}d", param->option.size.width, param->option.size.height); + return ANI_OK; } - -void ScreenshotAniUtils::GetScreenshotRect(ani_env *env, std::unique_ptr ¶m, ani_object options) + +ani_status ScreenshotAniUtils::GetScreenshotRect(ani_env* env, std::unique_ptr& param, ani_object options) { + TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_ref obj; - env->Object_GetPropertyByName_Ref(options, "screenRect", &obj); + ani_status ret = env->Object_GetPropertyByName_Ref(options, "screenRect", &obj); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] get screenRect failed"); + return ret; + } + ani_boolean isUndefRes = false; + ret = env->Reference_IsUndefined(obj, &isUndefRes); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "[ANI] check screenRect is undefined failed"); + return ret; + } + if (isUndefRes) { + TLOGI(WmsLogTag::DMS, "[ANI] screenRect is undefined"); + return ANI_OK; + } ani_long left = 0; ani_long top = 0; ani_long width = 0; @@ -142,5 +197,65 @@ void ScreenshotAniUtils::GetScreenshotRect(ani_env *env, std::unique_ptr param->option.rect.top = static_cast(top); param->option.rect.width = static_cast(width); param->option.rect.height = static_cast(height); + TLOGI(WmsLogTag::DMS, + "[ANI] get screenRect left = %{public}d, top = %{public}d, width = %{public}d, height = %{public}d", + param->option.rect.left, param->option.rect.top, param->option.rect.width, param->option.rect.height); + return ANI_OK; +} + +ani_status ScreenshotAniUtils::ReadOptionalField(ani_env* env, ani_object obj, const char* fieldName, ani_ref& ref) +{ + ani_status ret = env->Object_GetPropertyByName_Ref(obj, fieldName, &ref); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "Failed to get property %{public}s, ret %{public}d", fieldName, ret); + return ret; + } + ani_boolean isUndefRes; + ret = env->Reference_IsUndefined(ref, &isUndefRes); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::DMS, "Failed to check ref is undefined, ret %{public}d", ret); + ref = nullptr; + return ret; + } + if (isUndefRes) { + ref = nullptr; + } + return ret; +} + +ani_status ScreenshotAniUtils::ReadOptionalLongField(ani_env* env, ani_object obj, const char* fieldName, + ani_long& value) +{ + ani_ref ref = nullptr; + ani_status result = ReadOptionalField(env, obj, fieldName, ref); + if (result == ANI_OK && ref != nullptr) { + result = env->Object_CallMethodByName_Long(reinterpret_cast(ref), "unboxed", ":l", &value); + } + return result; +} + + +ani_status ScreenshotAniUtils::ReadOptionalIntField(ani_env* env, ani_object obj, const char* fieldName, int& value) +{ + ani_ref ref = nullptr; + ani_status result = ReadOptionalField(env, obj, fieldName, ref); + if (result == ANI_OK && ref != nullptr) { + result = env->Object_CallMethodByName_Int(reinterpret_cast(ref), "unboxed", ":i", &value); + } + return result; +} + +ani_status ScreenshotAniUtils::ReadOptionalBoolField(ani_env* env, ani_object obj, const char* fieldName, bool& value) +{ + ani_ref ref = nullptr; + ani_status result = ReadOptionalField(env, obj, fieldName, ref); + if (result == ANI_OK && ref != nullptr) { + ani_boolean aniBool; + result = env->Object_CallMethodByName_Boolean(reinterpret_cast(ref), "unboxed", ":z", &aniBool); + if (result == ANI_OK) { + value = static_cast(aniBool); + } + } + return result; } } \ No newline at end of file -- Gitee From ef807941a9bf1ebd6e340be5070891d48f02ebcf Mon Sep 17 00:00:00 2001 From: chenpeng Date: Tue, 26 Aug 2025 19:00:57 +0800 Subject: [PATCH 103/109] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenpeng --- .../screenshot_ani/include/screenshot_ani_utils.h | 6 +++--- .../screenshot_ani/src/screenshot_ani_utils.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h index a3e01fea94..99dad41043 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/include/screenshot_ani_utils.h @@ -36,11 +36,11 @@ static ani_status CallAniFunctionVoid(ani_env* env, const char* ns, static void ConvertScreenshot(ani_env* env, std::shared_ptr image, ani_object obj); -static ani_status GetScreenshotParam(ani_env* env, std::unique_ptr& param, ani_object options); +static ani_status GetScreenshotParam(ani_env* env, const std::unique_ptr& param, ani_object options); -static ani_status GetScreenshotSize(ani_env* env, std::unique_ptr& param, ani_object options); +static ani_status GetScreenshotSize(ani_env* env, const std::unique_ptr& param, ani_object options); -static ani_status GetScreenshotRect(ani_env* env, std::unique_ptr& param, ani_object options); +static ani_status GetScreenshotRect(ani_env* env, const std::unique_ptr& param, ani_object options); static ani_status ReadOptionalField(ani_env* env, ani_object obj, const char* fieldName, ani_ref& ref); static ani_status ReadOptionalLongField(ani_env* env, ani_object obj, const char* fieldName, ani_long& value); diff --git a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp index ce0871813f..a0e38e2c80 100644 --- a/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp +++ b/interfaces/kits/ani/screenshot_runtime/screenshot_ani/src/screenshot_ani_utils.cpp @@ -90,7 +90,8 @@ ani_status ScreenshotAniUtils::CallAniFunctionVoid(ani_env* env, const char* ns, return ret; } -ani_status ScreenshotAniUtils::GetScreenshotParam(ani_env* env, std::unique_ptr& param, ani_object options) +ani_status ScreenshotAniUtils::GetScreenshotParam(ani_env* env, const std::unique_ptr& param, + ani_object options) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); if (param == nullptr) { @@ -136,7 +137,7 @@ ani_status ScreenshotAniUtils::GetScreenshotParam(ani_env* env, std::unique_ptr< return ANI_OK; } -ani_status ScreenshotAniUtils::GetScreenshotSize(ani_env* env, std::unique_ptr& param, ani_object options) +ani_status ScreenshotAniUtils::GetScreenshotSize(ani_env* env, const std::unique_ptr& param, ani_object options) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_ref obj; @@ -166,7 +167,7 @@ ani_status ScreenshotAniUtils::GetScreenshotSize(ani_env* env, std::unique_ptr

& param, ani_object options) +ani_status ScreenshotAniUtils::GetScreenshotRect(ani_env* env, const std::unique_ptr& param, ani_object options) { TLOGI(WmsLogTag::DMS, "[ANI] begin"); ani_ref obj; -- Gitee From ba8a663a63bd8b4627abc5464787c9834447e33f Mon Sep 17 00:00:00 2001 From: yanzhimo Date: Wed, 27 Aug 2025 17:25:36 +0800 Subject: [PATCH 104/109] ANI on('rotationChange') debug Signed-off-by: yanzhimo --- .../window_stage_ani/src/ani_window_utils.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp index 32699fd997..6a2f701123 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_utils.cpp @@ -606,8 +606,18 @@ ani_object AniWindowUtils::CreateAniRotationChangeInfo(ani_env* env, const Rotat void AniWindowUtils::ParseRotationChangeResult(ani_env* env, ani_object obj, RotationChangeResult& rotationChangeResult) { + ani_boolean isUndefined; + ani_status ret = env->Reference_IsUndefined(obj, &isUndefined); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] Check rotationChangeResultObj isUndefined failed, ret: %{public}d", ret); + return; + } + if (isUndefined) { + TLOGI(WmsLogTag::WMS_ROTATION, "[ANI] RotationChangeResult is undefined"); + return; + } ani_ref rectTypeRef; - ani_status ret = env->Object_GetPropertyByName_Ref(obj, "rectType", &rectTypeRef); + ret = env->Object_GetPropertyByName_Ref(obj, "rectType", &rectTypeRef); if (ret != ANI_OK) { TLOGE(WmsLogTag::WMS_ROTATION, "[ANI] Object_GetPropertyByName_Ref failed, ret: %{public}d", ret); return; -- Gitee From 98d29c9ed17f99ab823c212fe44f4a091c0fe317 Mon Sep 17 00:00:00 2001 From: yanxinyu7 Date: Thu, 28 Aug 2025 10:52:37 +0800 Subject: [PATCH 105/109] bugfix Signed-off-by: yanxinyu7 --- .../window_runtime/window_stage_ani/src/ani_window_manager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index 792b210516..dcd00a1c41 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -325,6 +325,7 @@ bool ParseConfigOption(ani_env* env, ani_object configuration, WindowOption &opt if (displayId < 0 || SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { TLOGI(WmsLogTag::DEFAULT, "[ANI] DisplayId is invalid"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); return false; } option.SetDisplayId(displayId); -- Gitee From 988b8df0636628fc89d87a589e79fafaf2c1c050 Mon Sep 17 00:00:00 2001 From: yanxinyu7 Date: Thu, 28 Aug 2025 14:39:54 +0800 Subject: [PATCH 106/109] bugfix Signed-off-by: yanxinyu7 --- .../window_runtime/window_stage_ani/src/ani_window_manager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index dcd00a1c41..b1213111db 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -326,7 +326,6 @@ bool ParseConfigOption(ani_env* env, ani_object configuration, WindowOption &opt SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { TLOGI(WmsLogTag::DEFAULT, "[ANI] DisplayId is invalid"); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); - return false; } option.SetDisplayId(displayId); -- Gitee From fbf942dba3d7ac13f9573f4ed9a218fa315b36b9 Mon Sep 17 00:00:00 2001 From: yanxinyu7 Date: Thu, 28 Aug 2025 16:05:52 +0800 Subject: [PATCH 107/109] bugfix Signed-off-by: yanxinyu7 --- .../window_stage_ani/src/ani_window_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp index b1213111db..ddfa527d29 100644 --- a/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp +++ b/interfaces/kits/ani/window_runtime/window_stage_ani/src/ani_window_manager.cpp @@ -231,10 +231,10 @@ ani_ref CreateAniSystemWindow(ani_env* env, void* contextPtr, sptr WMError wmError = WMError::WM_OK; sptr window = Window::Create(windowOption->GetWindowName(), windowOption, context->lock(), wmError); WmErrorCode wmErrorCode = WM_JS_TO_ERROR_CODE_MAP.at(wmError); - if (window == nullptr && wmErrorCode != WmErrorCode::WM_OK) { - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); - } else { + if (window != nullptr && wmErrorCode == WmErrorCode::WM_OK) { return CreateAniWindowObject(env, window); + } else { + return AniWindowUtils::AniThrowError(env, wmErrorCode, "Create window failed"); } } -- Gitee From c4ac666ff9a70eb35b8b425aeb7ad895b7c18ffe Mon Sep 17 00:00:00 2001 From: MoeLight Date: Wed, 3 Sep 2025 18:37:13 +0800 Subject: [PATCH 108/109] 0902 --- .../src/zidl/session_stage_proxy.cpp | 22 +++--- .../session/host/src/zidl/session_proxy.cpp | 70 ++++++++++++------- .../src/zidl/scene_session_manager_proxy.cpp | 32 +++++---- wm/src/zidl/window_manager_agent_proxy.cpp | 8 ++- 4 files changed, 81 insertions(+), 51 deletions(-) diff --git a/window_scene/session/container/src/zidl/session_stage_proxy.cpp b/window_scene/session/container/src/zidl/session_stage_proxy.cpp index f40a62771e..36022798ff 100644 --- a/window_scene/session/container/src/zidl/session_stage_proxy.cpp +++ b/window_scene/session/container/src/zidl/session_stage_proxy.cpp @@ -1501,9 +1501,11 @@ void SessionStageProxy::NotifyKeyboardPanelInfoChange(const KeyboardPanelInfo& k TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return; } - if (remote->SendRequest(static_cast(SessionStageInterfaceCode::TRANS_ID_NOTIFY_KEYBOARD_INFO_CHANGE), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest notify keyboard panel info change failed"); + int sendCode = remote->SendRequest( + static_cast(SessionStageInterfaceCode::TRANS_ID_NOTIFY_KEYBOARD_INFO_CHANGE), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest notify keyboard panel info change failed, code:%{public}d", sendCode); return; } } @@ -1967,10 +1969,11 @@ void SessionStageProxy::NotifyKeyboardAnimationCompleted(const KeyboardPanelInfo TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return; } - if (remote->SendRequest( + int sendCode = remote->SendRequest( static_cast(SessionStageInterfaceCode::TRANS_ID_NOTIFY_KEYBOARD_ANIMATION_COMPLETED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } @@ -2112,10 +2115,11 @@ void SessionStageProxy::NotifyKeyboardAnimationWillBegin(const KeyboardAnimation TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return; } - if (remote->SendRequest( + int sendCode = remote->SendRequest( static_cast(SessionStageInterfaceCode::TRANS_ID_NOTIFY_KEYBOARD_ANIMATION_WILLBEGIN), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index 698e8d857a..b6f0116b93 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -1052,9 +1052,11 @@ WMError SessionProxy::NotifySnapshotUpdate() TLOGE(WmsLogTag::WMS_PATTERN, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_NOTIFY_SNAPSHOT_UPDATE), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed"); + int sendCode =remote->SendRequest(static_cast( + SessionInterfaceCode::TRANS_ID_NOTIFY_SNAPSHOT_UPDATE), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed, code:%{public}d", sendCode); return WMError::WM_ERROR_IPC_FAILED; } return WMError::WM_OK; @@ -2117,9 +2119,11 @@ void SessionProxy::SetCallingSessionId(const uint32_t callingSessionId) TLOGE(WmsLogTag::DEFAULT, "remote is null"); return; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_CALLING_SESSION_ID), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_SET_CALLING_SESSION_ID), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); return; } } @@ -2167,9 +2171,11 @@ WSError SessionProxy::AdjustKeyboardLayout(const KeyboardLayoutParams& params) TLOGE(WmsLogTag::DEFAULT, "remote is null"); return WSError::WS_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_ADJUST_KEYBOARD_LAYOUT), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + inr sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_ADJUST_KEYBOARD_LAYOUT), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); return WSError::WS_ERROR_IPC_FAILED; } return static_cast(reply.ReadInt32()); @@ -2193,9 +2199,11 @@ WSError SessionProxy::ChangeKeyboardEffectOption(const KeyboardEffectOption& eff TLOGE(WmsLogTag::DEFAULT, "remote is null"); return WSError::WS_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_CHANGE_KEYBOARD_VIEW_MODE), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_CHANGE_KEYBOARD_VIEW_MODE), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d",sendCode); return WSError::WS_ERROR_IPC_FAILED; } return WSError::WS_OK; @@ -3031,10 +3039,11 @@ void SessionProxy::NotifyWindowAttachStateListenerRegistered(bool registered) TLOGE(WmsLogTag::WMS_MAIN, "remote is null"); return; } - if (remote->SendRequest( + int sendCode = remote->SendRequest( static_cast(SessionInterfaceCode::TRANS_ID_NOTIFY_WINDOW_ATTACH_STATE_LISTENER_REGISTERED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_MAIN, "SendRequest failed"); + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_MAIN, "SendRequest failed, code:%{public}d", sendCode); } } @@ -3056,9 +3065,11 @@ void SessionProxy::NotifyKeyboardWillShowRegistered(bool registered) TLOGE(WmsLogTag::WMS_KEYBOARD, "Remote is null"); return; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_WILL_SHOW_REGISTERED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_WILL_SHOW_REGISTERED), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } @@ -3080,9 +3091,11 @@ void SessionProxy::NotifyKeyboardWillHideRegistered(bool registered) TLOGE(WmsLogTag::WMS_KEYBOARD, "Remote is null"); return; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_WILL_HIDE_REGISTERED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_WILL_HIDE_REGISTERED), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } @@ -3104,9 +3117,11 @@ void SessionProxy::NotifyKeyboardDidShowRegistered(bool registered) TLOGE(WmsLogTag::WMS_KEYBOARD, "Remote is null"); return; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_SHOW_REGISTERED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_SHOW_REGISTERED), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } @@ -3128,9 +3143,10 @@ void SessionProxy::NotifyKeyboardDidHideRegistered(bool registered) TLOGE(WmsLogTag::WMS_KEYBOARD, "Remote is null"); return; } - if (remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_HIDE_REGISTERED), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode =remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_HIDE_REGISTERED), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); } } diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index db6bc357c1..6d72ab68d1 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -2620,9 +2620,11 @@ WMError SceneSessionManagerProxy::GetCallingWindowWindowStatus(int32_t persisten TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_STATUS), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_STATUS), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); return WMError::WM_ERROR_IPC_FAILED; } auto ret = static_cast(reply.ReadInt32()); @@ -2650,9 +2652,11 @@ WMError SceneSessionManagerProxy::GetCallingWindowRect(int32_t persistentId, Rec TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_RECT), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SceneSessionManagerMessage::TRANS_ID_GET_WINDOW_RECT), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); return WMError::WM_ERROR_IPC_FAILED; } auto ret = static_cast(reply.ReadInt32()); @@ -3188,9 +3192,11 @@ WMError SceneSessionManagerProxy::SetImageForRecent(uint32_t imgResourceId, Imag TLOGE(WmsLogTag::WMS_PATTERN, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast(SceneSessionManagerMessage::TRANS_ID_SET_IMAGE_FOR_RECENT), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed"); + int sendCode = remote->SendRequest( + static_cast(SceneSessionManagerMessage::TRANS_ID_SET_IMAGE_FOR_RECENT), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed, code:%{public}d", sendCode); return WMError::WM_ERROR_IPC_FAILED; } uint32_t ret = 0; @@ -3447,9 +3453,11 @@ WMError SceneSessionManagerProxy::SetStartWindowBackgroundColor( TLOGE(WmsLogTag::WMS_PATTERN, "Remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - if (remote->SendRequest(static_cast( - SceneSessionManagerMessage::TRANS_ID_SET_START_WINDOW_BACKGROUND_COLOR), data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed"); + int sendCode = remote->SendRequest(static_cast( + SceneSessionManagerMessage::TRANS_ID_SET_START_WINDOW_BACKGROUND_COLOR), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_PATTERN, "SendRequest failed, code:%{public}d", sendCode); return WMError::WM_ERROR_IPC_FAILED; } int32_t ret = 0; diff --git a/wm/src/zidl/window_manager_agent_proxy.cpp b/wm/src/zidl/window_manager_agent_proxy.cpp index f50504ebd3..7c82cd4266 100644 --- a/wm/src/zidl/window_manager_agent_proxy.cpp +++ b/wm/src/zidl/window_manager_agent_proxy.cpp @@ -445,9 +445,11 @@ void WindowManagerAgentProxy::NotifyCallingWindowDisplayChanged(const CallingWin TLOGE(WmsLogTag::WMS_KEYBOARD, "remote is null"); return; } - if (remote->SendRequest(static_cast(WindowManagerAgentMsg::TRANS_ID_NOTIFY_CALLING_DISPLAY_CHANGE), - data, reply, option) != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest calling display info change failed"); + int sendCode = remote->SendRequest( + static_cast(WindowManagerAgentMsg::TRANS_ID_NOTIFY_CALLING_DISPLAY_CHANGE), + data, reply, option); + if (sendCode != ERR_NONE) { + TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest calling display info change failed, code:%{public}d", sendCode); } } -- Gitee From b2c1b6d3c737f75dd058195823da13ebdf444d9f Mon Sep 17 00:00:00 2001 From: MoeLight Date: Thu, 4 Sep 2025 09:12:11 +0800 Subject: [PATCH 109/109] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dipc=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=B3=95=E7=AA=97=E5=8F=A3=E6=9C=AA=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E6=97=A5=E5=BF=97=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MoeLight --- .../session/container/src/zidl/session_stage_proxy.cpp | 3 ++- window_scene/session/host/src/zidl/session_proxy.cpp | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/window_scene/session/container/src/zidl/session_stage_proxy.cpp b/window_scene/session/container/src/zidl/session_stage_proxy.cpp index 36022798ff..36793e016b 100644 --- a/window_scene/session/container/src/zidl/session_stage_proxy.cpp +++ b/window_scene/session/container/src/zidl/session_stage_proxy.cpp @@ -1505,7 +1505,8 @@ void SessionStageProxy::NotifyKeyboardPanelInfoChange(const KeyboardPanelInfo& k static_cast(SessionStageInterfaceCode::TRANS_ID_NOTIFY_KEYBOARD_INFO_CHANGE), data, reply, option); if (sendCode != ERR_NONE) { - TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest notify keyboard panel info change failed, code:%{public}d", sendCode); + TLOGE(WmsLogTag::WMS_KEYBOARD, + "SendRequest notify keyboard panel info change failed, code:%{public}d", sendCode); return; } } diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index b6f0116b93..aeedd3f932 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -1052,7 +1052,7 @@ WMError SessionProxy::NotifySnapshotUpdate() TLOGE(WmsLogTag::WMS_PATTERN, "remote is null"); return WMError::WM_ERROR_IPC_FAILED; } - int sendCode =remote->SendRequest(static_cast( + int sendCode = remote->SendRequest(static_cast( SessionInterfaceCode::TRANS_ID_NOTIFY_SNAPSHOT_UPDATE), data, reply, option); if (sendCode != ERR_NONE) { @@ -2171,7 +2171,7 @@ WSError SessionProxy::AdjustKeyboardLayout(const KeyboardLayoutParams& params) TLOGE(WmsLogTag::DEFAULT, "remote is null"); return WSError::WS_ERROR_IPC_FAILED; } - inr sendCode = remote->SendRequest( + int sendCode = remote->SendRequest( static_cast(SessionInterfaceCode::TRANS_ID_ADJUST_KEYBOARD_LAYOUT), data, reply, option); if (sendCode != ERR_NONE) { @@ -3143,7 +3143,8 @@ void SessionProxy::NotifyKeyboardDidHideRegistered(bool registered) TLOGE(WmsLogTag::WMS_KEYBOARD, "Remote is null"); return; } - int sendCode =remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_HIDE_REGISTERED), + int sendCode = remote->SendRequest( + static_cast(SessionInterfaceCode::TRANS_ID_SET_KEYBOARD_DID_HIDE_REGISTERED), data, reply, option); if (sendCode != ERR_NONE) { TLOGE(WmsLogTag::WMS_KEYBOARD, "SendRequest failed, code:%{public}d", sendCode); -- Gitee