From 993e86c60a37ae1f017c75d7e08f6175f71876d6 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 11:04:35 +0800 Subject: [PATCH 01/14] ani stage 3 of imms & attr Signed-off-by: wangzilin --- interfaces/kits/ani/window_runtime/BUILD.gn | 2 + .../window_stage_ani/ets/@ohos.window.ets | 326 ++++++++- .../window_stage_ani/include/ani_window.h | 18 + .../include/ani_window_manager.h | 11 + .../include/ani_window_stage.h | 2 + .../include/ani_window_utils.h | 8 + .../window_stage_ani/src/ani_window.cpp | 618 ++++++++++++++++++ .../src/ani_window_manager.cpp | 159 +++++ .../window_stage_ani/src/ani_window_stage.cpp | 65 ++ .../src/ani_window_stage_module.cpp | 4 + .../window_stage_ani/src/ani_window_utils.cpp | 215 +++++- 11 files changed, 1426 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ani/window_runtime/BUILD.gn b/interfaces/kits/ani/window_runtime/BUILD.gn index 52d564af1d..156fa9a864 100644 --- a/interfaces/kits/ani/window_runtime/BUILD.gn +++ b/interfaces/kits/ani/window_runtime/BUILD.gn @@ -77,6 +77,8 @@ ohos_shared_library("windowstageani_kit") { "bundle_framework:appexecfwk_base", "c_utils:utils", "eventhandler:libeventhandler", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", "hilog:libhilog", "hitrace:hitrace_meter", "image_framework:image", 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 b8c30dcca3..377c1c0548 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 @@ -717,6 +717,44 @@ export enum RectType { RELATIVE_TO_PARENT_WINDOW = 1 } +export interface StatusBarProperty { + contentColor: string; +} + +export class StatusBarPropertyInternal implements StatusBarProperty { + contentColor: string; +} + +export interface WindowLayoutInfo { + windowRect: Rect; +} + +export class WindowLayoutInfoInternal implements WindowLayoutInfo { + windowRect: Rect; +} + +export interface WindowInfo { + rect: Rect; + globalDisplayRect?: Rect; + bundleName: string; + abilityName: string; + windowId: int; + windowStatusType: WindowStatusType; + isFocused?: boolean; +} + +export class WindowInfoInternal implements WindowInfo { + rect: Rect; + globalDisplayRect?: Rect; + bundleName: string; + abilityName: string; + windowId: int; + windowStatusType: WindowStatusType; + isFocused?: boolean; + windowStatusTypeInternal: int; + isFocusedInternal: boolean; +} + export interface SystemBarProperties { /** * The color of the status bar. @@ -1303,6 +1341,12 @@ export interface WindowDensityInfo { customDensity: double; } +export class WindowDensityInfoInternal implements WindowDensityInfo { + systemDensity: double; + defaultDensity: double; + customDensity: double; +} + export interface SystemBarStyle { statusBarContentColor?: string; } @@ -1565,6 +1609,13 @@ export interface GetWindowsByCoordinateParam { y: number; } +export class GetWindowsByCoordinateParam implements GetWindowsByCoordinateParam{ + displayId: number; + windowNumber: number; + x: number; + y: number; +} + /** * The information of keyboard * @@ -1872,6 +1923,8 @@ export class WindowStageInternal implements WindowStage { public native setShowOnLockScreenSync(nativeObj:long, showOnLockScreen: boolean): void; public native getMainWindowSync(nativeObj: long): Window; public native createSubWindowSync(nativeObj: long, name: String): Window; + public native setCustomDensitySync(nativeObj: long, density: double): void; + public native setDefaultDensityEnabledSync(nativeObj: long, enabled: boolean): void; native onSync(nativeObj: long, eventType: 'windowStageEvent', callback: Object): void; native offSync(nativeObj: long, eventType: 'windowStageEvent', callback?: Object): void; @@ -1979,6 +2032,14 @@ export class WindowStageInternal implements WindowStage { this.setShowOnLockScreenSync(this.nativeObj, showOnLockScreen); } + public setCustomDensity(density: double): void { + this.setCustomDensitySync(this.nativeObj, density); + } + + public setDefaultDensityEnabled(enabled: boolean): void { + this.setDefaultDensityEnabledSync(this.nativeObj, enabled); + } + public getMainWindowSync(): Window { let ret = this.getMainWindowSync(this.nativeObj); return ret; @@ -2054,6 +2115,8 @@ export interface WindowStage { createSubWindow(name: string, callback: AsyncCallback): void; disableWindowDecor(): void; setShowOnLockScreen(showOnLockScreen: boolean): void; + setCustomDensity(density: double): void; + setDefaultDensityEnabled(enabled: boolean): void; on(eventType: 'windowStageEvent', callback: Callback): void; off(eventType: 'windowStageEvent', callback?: Callback): void; } @@ -2140,6 +2203,24 @@ export class WindowInternal implements Window { private native showWithAnimationSync(nativeObj: long): void; private native setWindowFocusableSync(nativeObj: long, isFocusable: boolean): void; + private native setWindowBrightness(nativeObj: long, brightness: double): void; + private native getWindowColorSpace(nativeObj: long): int; + private native setWakeUpScreen(nativeObj: long, wakeUp: boolean): void; + private native setSnapshotSkip(nativeObj: long, isSkip: boolean): void; + private native snapshotIgnorePrivacy(nativeObj: long): image.PixelMap; + private native setWindowContainerColor(nativeObj: long, activeColor: string, inactiveColor: string): void; + private native getStatusBarProperty(nativeObj: long): StatusBarProperty; + private native setStatusBarColor(nativeObj: long, color: long): void; + private native isSystemAvoidAreaEnabled(nativeObj: long): boolean; + private native setSystemAvoidAreaEnabled(nativeObj: long, enabled: boolean): void; + private native getWindowDensityInfo(nativeObj: long): WindowDensityInfo; + private native getImmersiveModeEnabledState(nativeObj: long): boolean; + private native setWindowGrayScale(nativeObj: LockGrantedCallback, grayScale: double): void; + private native getWindowSystemBarProperties(nativeObj: long): SystemBarProperties; + private native isGestureBackEnabled(nativeObj: long): boolean; + private native setGestureBackEnabled(nativeObj: long, enabled: boolean): void; + private native setSingleFrameComposerEnabled(nativeObj: long, enabled: boolean): void; + private native setWindowTouchableSync(nativeObj: long, isTouchable: boolean): void; private native onNoInteractionDetected(nativeObj: long, type: string, timeout: long, callback: Object): void; private native keepKeyboardOnFocusSync(nativeObj: long, enable: boolean): void; @@ -3012,6 +3093,134 @@ export class WindowInternal implements Window { }); }); } + + public setWindowBrightness(brightness: double): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowBrightness(this.nativeObj, brightness); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public setWindowBrightness(brightness: double, callback: AsyncCallback): void { + taskpool.execute((): void => { + this.setWindowBrightness(this.nativeObj, brightness); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); + } + + public getWindowColorSpace(): ColorSpace { + return this.getWindowColorSpace(this.nativeObj) as ColorSpace; + } + + public setWakeUpScreen(wakeUp: boolean): void { + return this.getWindowColorSpace(this.nativeObj, wakeUp); + } + + public setSnapshotSkip(isSkip: boolean): void { + return this.setSnapshotSkip(this.nativeObj, isSkip); + } + + public snapshotIgnorePrivacy(): Promise { + return new Promise((resolve: (value: image.PixelMap) => void, + reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.snapshotIgnorePrivacy(this.nativeObj); + }).then((ret: NullishType) => { + resolve(ret as image.PixelMap); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public setWindowContainerColor(activeColor: string, inactiveColor: string): void { + return this.setWindowContainerColor(this.nativeObj, activeColor, inactiveColor); + } + + public setStatusBarColor(color: ColorMetrics): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setStatusBarColor( + this.nativeObj, (color.alpha << 24) | (color.red << 16) | (color.green << 8) | color.blue); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public isSystemAvoidAreaEnabled(): boolean { + return this.isSystemAvoidAreaEnabled(this.nativeObj); + } + + public setSystemAvoidAreaEnabled(enabled: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setSystemAvoidAreaEnabled(this.nativeObj, enabled); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public getImmersiveModeEnabledState(): boolean { + return this.getImmersiveModeEnabledState(this.nativeObj); + } + + public setWindowGrayScale(grayScale: double): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setWindowGrayScale(this.nativeObj, grayScale); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public getWindowSystemBarProperties(): SystemBarProperties { + return this.getWindowSystemBarProperties(this.nativeObj); + } + + public isGestureBackEnabled(): boolean { + return this.isGestureBackEnabled(this.nativeObj); + } + + public setGestureBackEnabled(enabled: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setGestureBackEnabled(this.nativeObj, enabled); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } + + public setSingleFrameComposerEnabled(enabled: boolean): Promise { + return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + this.setSingleFrameComposerEnabled(this.nativeObj, enabled); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); + } } export interface Window { @@ -3106,6 +3315,25 @@ export interface Window { rotate(rotateOptions: RotateOptions): void; setShadow(radius: double, color?: string, offsetX?: double, offsetY?: double): void; setCornerRadius(cornerRadius: double): void; + setWindowBrightness(brightness: double): Promise; + setWindowBrightness(brightness: DoubleRange, callback: AsyncCallback): void; + getWindowColorSpace(): ColorSpace; + setWakeUpScreen(wakeUp: boolean): void; + setSnapshotSkip(isSkip: boolean): void; + snapshotIgnorePrivacy(): Promise; + setWindowContainerColor(activeColor: string, inactiveColor: string): void; + getStatusBarProperty(): StatusBarProperty; + setStatusBarColor(color: ColorMetrics): Promise; + isSystemAvoidAreaEnabled(): boolean; + setSystemAvoidAreaEnabled(enabled: boolean): Promise; + getWindowDensityInfo(): WindowDensityInfo; + getImmersiveModeEnabledState(): boolean; + setWindowGrayScale(grayScale: double): Promise; + getWindowSystemBarProperties(): SystemBarProperties; + isGestureBackEnabled(): boolean; + setGestureBackEnabled(enabled: boolean): Promise; + setSingleFrameComposerEnabled(enabled: boolean): Promise; + on(type: string, callback: Callback): void; on(type: 'noInteractionDetected', timeout: long, callback: Callback): void; off(type: string, callback?: Callback): void; @@ -3129,6 +3357,11 @@ 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: int, targetWindowId: int): void; native function createWindowSync(nativeObj: long, config: Configuration): Window; +native function getAllWindowLayoutInfo(nativeObj: long, displayId: long): Array; +native function getSnapshot(nativeObj: long, windowId: number); +native function getVisibleWindowInfo(native: long): Array; +native function setGestureNavigationEnabled(native: long, enabled: boolean): void; +native function setWaterMarkImage(native: long, pixelMap: image.PixelMap, enabled: boolean): void; export function getLastWindow(ctx: BaseContext): Promise { return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { @@ -3208,7 +3441,7 @@ export function getWindowsByCoordinate(displayId: number, windowNumber?: number, windowNumber: 0, x: -1, y: -1 - }; + } as GetWindowsByCoordinateParamInternal; if (windowNumber != undefined) { param.windowNumber = windowNumber; } @@ -3227,6 +3460,97 @@ export function getWindowsByCoordinate(displayId: number, windowNumber?: number, }); } +export function getAllWindowLayoutInfo(displayId: long): Promise> { + return new Promise>(( + resolve: (value: Array) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + return getAllWindowLayoutInfo(nativeObj, displayId); + }).then((ret: NullishType) => { + resolve(ret as Array); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function getSnapshot(windowId: number): Promise { + return new Promise(( + resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + return getSnapshot(nativeObj, windowId); + }).then((ret: NullishType) => { + resolve(ret as image.PixelMap); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function getVisibleWindowInfo(): Promise> { + return new Promise>(( + resolve: (value: Array) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + let visibleWindowInfos = getVisibleWindowInfo(nativeObj); + for (let i = 0; i < visibleWindowInfos.length; i++) { + visibleWindowInfos[i].windowStatusType = + visibleWindowInfos[i].windowStatusTypeInternal as WindowStatusType; + visibleWindowInfos[i].isFocused = visibleWindowInfos[i].isFocusedInternal; + } + return visibleWindowInfos; + }).then((ret: NullishType) => { + resolve(ret as Array); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function setGestureNavigationEnabled(enabled: boolean): Promise { + return new Promise(( + resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + return setGestureNavigationEnabled(nativeObj, enabled); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function setGestureNavigationEnabled(enabled: boolean, callback: AsyncCallback): void { + taskpool.execute((): void => { + setGestureNavigationEnabled(nativeObj, enabled); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); +} + +export function setWaterMarkImage(pixelMap: image.PixelMap, enabled: boolean): Promise { + return new Promise(( + resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { + taskpool.execute((): void => { + return setWaterMarkImage(nativeObj, pixelMap, enabled); + }).then((ret: NullishType) => { + resolve(undefined); + }).catch((err: NullishType) => { + reject(err as BusinessError); + }); + }); +} + +export function setWaterMarkImage(pixelMap: image.PixelMap, enabled: boolean, callback: AsyncCallback): void { + taskpool.execute((): void => { + setWaterMarkImage(nativeObj, pixelMap, enabled); + }).then((ret: NullishType) => { + callback(new BusinessError(), undefined); + }).catch((err: NullishType) => { + callback(err as BusinessError, undefined); + }); +} + export function findWindow(name: string): Window { return findWindowSync(nativeObj, name); } 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 d8ab3fdfbf..28add0d2f9 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 @@ -123,6 +123,24 @@ public: ani_object Snapshot(ani_env* env); void HideNonSystemFloatingWindows(ani_env* env, ani_boolean shouldHide); + void SetWindowBrightness(ani_env* env, ani_boolean brightness); + ani_int GetWindowColorSpace(ani_env* env); + void SetWakeUpScreen(ani_env* env, ani_boolean wakeUp); + void SetSnapshotSkip(ani_env* env, ani_boolean isSkip); + ani_object SnapshotIgnorePrivacy(ani_env* env); + void SetWindowContainerColor(ani_env* env, ani_string activeColor, ani_string inactiveColor); + ani_object GetStatusBarProperty(ani_env* env); + void SetStatusBarColor(ani_env* env, ani_long color); + ani_boolean IsSystemAvoidAreaEnabled(ani_env* env); + void SetSystemAvoidAreaEnabled(ani_env* env, ani_boolean enabled); + ani_object GetWindowDensityInfo(ani_env* env); + ani_boolean GetImmersiveModeEnabledState(ani_env* env); + void SetWindowGrayScale(ani_env* env, ani_double grayScale); + ani_object GetWindowSystemBarProperties(ani_env* env); + ani_boolean IsGestureBackEnabled(ani_env* env); + void SetGestureBackEnabled(ani_env* env, ani_boolean enabled); + void SetSingleFrameComposerEnabled(ani_env* env, ani_boolean enabled); + private: void OnSetWindowColorSpace(ani_env* env, ani_int colorSpace); void OnSetPreferredOrientation(ani_env* env, ani_int orientation); 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 7ac8139371..cee3fd7c17 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 @@ -43,6 +43,12 @@ public: static void UnregisterWindowManagerCallback(ani_env* env, ani_long nativeObj, ani_string type, ani_ref callback); static void ShiftAppWindowFocus(ani_env* env, ani_long nativeObj, ani_int sourceWindowId, ani_int targetWindowId); + static ani_object GetAllWindowLayoutInfo(ani_env* env, ani_long nativeObj, ani_lonog displayId); + static ani_object GetSnapshot(ani_env* env, ani_long nativeObj, ani_double windowId); + static ani_object GetVisibleWindowInfo(ani_env* env, ani_long nativeObj); + static void SetGestureNavigationEnabled(ani_env* env, ani_long nativeObj, ani_boolean enabled); + static void SetWaterMarkImage(ani_env* env, ani_long nativeObj, ani_object nativePixelMap, ani_enabled enabled); + private: ani_object OnGetWindowsByCoordinate(ani_env* env, ani_object getWindowsParam); ani_ref OnGetLastWindow(ani_env* env, ani_object context); @@ -53,6 +59,11 @@ private: 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); + ani_object OnGetAllWindowLayoutInfo(ani_env* env, ani_lonog displayId); + ani_object OnGetSnapshot(ani_env* env, ani_double windowId); + ani_object OnGetVisibleWindowInfo(ani_env* env); + void SetGestureNavigationEnabled(ani_env* env, ani_boolean enabled); + void SetWaterMarkImage(ani_env* env, ani_object nativePixelMap, ani_enabled enabled); std::unique_ptr registerManager_ = nullptr; }; 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 6edf8f9cba..fb4f7a1387 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 @@ -42,6 +42,8 @@ class AniWindowStage { ani_ref callback); static void UnregisterWindowCallback(ani_env* env, ani_object obj, ani_long nativeObj, ani_string type, ani_ref callback); + static void SetCustomDensity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double density); + static void SetDefaultDensityEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled); void SetWindowRectAutoSave(ani_env* env, ani_boolean enabled, ani_boolean isSaveBySpecifiedFlag); ani_boolean IsWindowRectAutoSave(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 bc3b2dedbd..8558b89439 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 @@ -55,6 +55,14 @@ public: 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 CreateAniStatusBarProperty(ani_env* env, const SystemBarProperty& prop); + static ani_object CreateAniWindowDensityInfo(ani_env* env, const WindowDensityInfo& info); + static ani_object CreateAniWindowSystemBarProperties(ani_env* env, const SystemBarProperty& status, + const SystemBarProperty& navigation) + static ani_object CreateAniWindowLayoutInfo(ani_env* env, const WindowLayoutInfo& info); + static ani_object CreateAniWindowLayoutInfoArray(ani_env* env, const std::vector>& infos); + static ani_object CreateAniWindowInfo(ani_env* env, const WindowVisibilityInfo& info); + static ani_object CreateAniWindowInfoArray(ani_env* env, const std::vector>& infos); 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); 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 ab109414ae..42e1a2461b 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 @@ -45,6 +45,8 @@ 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; +constexpr double MIN_GRAY_SCALE = 0.0; +constexpr double MAX_GRAY_SCALE = 1.0; } // namespace static thread_local std::map g_aniWindowMap; @@ -2252,6 +2254,371 @@ void AniWindow::Finalizer(ani_env* env, ani_long nativeObj) TLOGE(WmsLogTag::DEFAULT, "[ANI] aniWindow is nullptr"); } } + +void AniWindow::SetWindowBrightness(ani_env* env, ani_double brightness) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WMError ret = windowToken_->SetBrightness(static_cast(brightness)); + if (ret != WMError::OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); + AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(ret), "Window set brightness failed"); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] set brightness end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); +} + +ani_int AniWindow::SetWindowColorSpace(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ANI_ERROR; + } + ColorSpace colorSpace = windowToken_->GetColorSpace(); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] colorSpace=%{public}u", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), static_cast(colorSpace)); + return static_cast(colorSpace); +} + +void AniWindow::SetWakeUpScreen(ani_env* env, ani_boolean wakeUp) +{ + if (!Permission::IsSystemCalling() && !Permission::IsStartByHdcd()) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set wake up screen permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + } + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetTurnScreenOn(wakeUp)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set wake up screen failed, code: %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] set wake up screen %{public}d end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), wakeUp); +} + +void AniWindow::SetSnapshotSkip(ani_env* env, ani_boolean isSkip) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetSnapshotSkip(static_cast(isSkip))); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set snapshot skip failed, code: %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret, "Window SetSnapshotSkip failed"); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] SetSnapshotSkip end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); +} + +ani_object AniWindow::SnapshotIgnorePrivacy(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 == nullptr; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SnapshotIgnorePrivacy(pixelMap)); + if (ret == WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "device not support"); + return AniWindowUtils::AniThrowError(env, ret); + } else if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get pixelmap failed, code: %{public}d", ret); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + auto nativePixelMap = Media::PixelMapTaiheAni::CreateEtsPixelMap(env, pixelMap); + if (nativePixelMap == nullptr || pixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "native PixelMap is null"); + return AniWindowUtils::CreateAniUndefined(env); + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "windowId:%{public}u, WxH=%{public}dx%{public}d", + windowToken_->GetWindowId(), pixelMap->GetWidth(), pixelMap->GetHeight()); + return nativePixelMap; +} + +void AniWindow::SetWindowContainerColor(ani_env* env, ani_string activeColor, ani_string inactiveColor) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + std::string stdActiveColor; + ani_status ret = AniWindowUtils::GetStdString(env, activeColor, stdActiveColor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to convert parameter to window container activeColor"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + std::string stdInactiveColor; + ret = AniWindowUtils::GetStdString(env, inactiveColor, stdInactiveColor); + if (ret != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to convert parameter to window container inactiveColor"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + WmErrorCode errorCode = WM_JS_TO_ERROR_CODE_MAP.at( + windowToken_->SetWindowContainerColor(stdActiveColor, stdInactiveColor)); + if (errorCode != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set window container color failed, code: %{public}d", errorCode); + AniWindowUtils::AniThrowError(env, errorCode); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] SetWindowContainerColor end", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str()); +} + +ani_object AniWindow::GetStatusBarProperty(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY);; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "only main window is allowed"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + } + SystemBarProperty statusBarProperty = windowToken_->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); + return AniWindowUtils::CreateAniStatusBarProperty(env, statusBarProperty); +} + +void AniWindow::SetStatusBarColor(ani_env* env, ani_long color) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto property = windowToken_->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); + property.contentColor_ = static_cast(color); + property.settingFlag_ = static_cast(static_cast(property.settingFlag_) | + static_cast(SystemBarSettingFlag::COLOR_SETTING)); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + windowToken_->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, property)); + if (ret != WmErrorCode::WM_OK){ + TLOGE(WmsLogTag::WMS_IMMS, "set status bar property error: %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret, "SetStatusBarProperty failed"); + } +} + +ani_boolean AniWindow::IsSystemAvoidAreaEnabled(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + if (!WindowHelper::IsSystemWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "only system window is valid"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return false; + } + uint32_t avoidAreaOption = 0; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetAvoidAreaOption(avoidAreaOption)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "get failed, ret %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret); + return false; + } + bool enabled = avoidAreaOption & static_cast(AvoidAreaOption::ENABLE_SYSTEM_WINDOW); + return static_cast(enabled); +} + +static ani_boolean IsSystemAvoidAreaEnabled(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 ANI_ERROR; + } + return aniWindow->IsSystemAvoidAreaEnabled(env); +} + +void AniWindow::SetSystemAvoidAreaEnabled(ani_env* env, ani_boolean enabled) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsSystemWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "only system window is valid"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + uint32_t option = 0; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetAvoidAreaOption(option)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "SetSystemAvoidAreaEnabled failed"); + AniWindowUtils::AniThrowError(env, ret); + return; + } + if (enabled) { + option |= static_cast(AvoidAreaOption::ENABLE_SYSTEM_WINDOW); + } else { + option &= ~static_cast(AvoidAreaOption::ENABLE_SYSTEM_WINDOW); + } + ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetAvoidAreaOption(option)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "failed, ret %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret, "set system avoid area enabled failed."); + } +} + +ani_object AniWindow::GetWindowDensityInfo(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + WindowDensityInfo densityInfo; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetWindowDensityInfo(densityInfo)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get failed, result=%{public}d", ret); + return AniWindowUtils::AniThrowError(env, ret); + } + return AniWindowUtils::CreateAniWindowDensityInfo(env, densityInfo); +} + +ani_boolean AniWindow::GetImmersiveModeEnabledState(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType()) && + !WindowHelper::IsSubWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "not allowed since invalid window type"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return false; + } + bool isEnabled = windowToken_->GetImmersiveModeEnabledState(); + TLOGI(WmsLogTag::WMS_IMMS, "win %{public}u isEnabled %{public}u get end", windowToken_->GetWindowId(), isEnabled); + return static_cast(isEnabled); +} + +void AniWindow::SetWindowGrayScale(ani_env* env, ani_double grayScale) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "windowToken_ is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + constexpr double eps = 1e-6; + if (grayScale < (MIN_GRAY_SCALE - eps) || grayScale > (MAX_GRAY_SCALE + eps)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, + "grayScale should be greater than or equal to 0.0, and should be smaller than or equal to 1.0"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetGrayScale(static_cast(grayScale))); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Set window gray scale failed %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret, "Set window gray scale failed"); + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "end, window [%{public}u, %{public}s] grayScale=%{public}f", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), grayScale); +} + +ani_object AniWindow::GetWindowSystemBarProperties(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is null"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "only main window is allowed"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + } + SystemBarProperty status = windowToken_->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_STATUS_BAR); + SystemBarProperty navi = windowToken_->GetSystemBarPropertyByType(WindowType::WINDOW_TYPE_NAVIGATION_BAR); + return AniWindowUtils::CreateAniWindowSystemBarProperties(env, status, navi); +} + +ani_boolean AniWindow::IsGestureBackEnabled(ani_env* env) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "get failed since invalid window type"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return false; + } + bool enabled = true; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetGestureBackEnabled(enabled)); + if (ret == WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT) { + TLOGE(WmsLogTag::WMS_IMMS, "device is not support"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_DEVICE_NOT_SUPPORT); + return false; + } else if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "get failed, ret %{public}d", ret); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_SYSTEM_ABNORMALLY); + return false; + } + TLOGI(WmsLogTag::WMS_IMMS, "win [%{public}u, %{public}s] enable %{public}u", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), enabled); + return enabled; +} + +void AniWindow::SetGestureBackEnabled(ani_env* env, ani_boolean enabled) +{ + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { + TLOGE(WmsLogTag::WMS_IMMS, "invalid window type"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetGestureBackEnabled(enabled)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Set single frame composer enabled failed, ret is %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret, "set failed."); + return; + } +} + +void AniWindow::SetSingleFrameComposerEnabled(ani_env* env, ani_boolean enabled) +{ + if (!Permission::IsSystemCalling() && !Permission::IsStartByHdcd()) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set single frame composer enabled permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + if (windowToken_ == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is null"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetSingleFrameComposerEnabled(enabled)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Set single frame composer enabled failed, ret is %{public}d", ret); + AniWindowUtils::AniThrowError(env, ret); + return; + } + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "end, window [%{public}u, %{public}s] enabled flag=%{public}d", + windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), enabled); +} + } // namespace Rosen } // namespace OHOS @@ -2717,6 +3084,223 @@ static void HideNonSystemFloatingWindows(ani_env* env, ani_object obj, ani_long aniWindow->HideNonSystemFloatingWindows(env, shouldHide); } +static void SetWindowBrightness(ani_env* env, ani_object obj, ani_long nativeObj, ani_double brightness) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetWindowBrightness(env, brightness); +} + +static ani_int GetWindowColorSpace(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return ANI_ERROR; + } + return aniWindow->GetWindowColorSpace(env); +} + +static void SetWakeUpScreen(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean wakeUp) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + return aniWindow->SetWakeUpScreen(env, wakeUp); +} + +static void SetSnapshotSkip(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean isSkip) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetSnapshotSkip(env, isSkip); +} + +static ani_object SnapshotIgnorePrivacy(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + return aniWindow->SnapshotIgnorePrivacy(env); +} + +static void SetWindowContainerColor(ani_env* env, ani_object obj, ani_long nativeObj, + ani_string activeColor, ani_string inactiveColor) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetWindowContainerColor(env, activeColor, inactiveColor); +} + +static ani_object GetStatusBarProperty(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + return aniWindow->GetStatusBarProperty(env); +} + +static void SetStatusBarColor(ani_env* env, ani_object obj, ani_long nativeObj, ani_long color) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetStatusBarColor(env, color); +} + +static ani_boolean IsSystemAvoidAreaEnabled(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + return aniWindow->IsSystemAvoidAreaEnabled(env); +} + +static void SetSystemAvoidAreaEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetSystemAvoidAreaEnabled(env, enabled); +} + +static ani_object GetWindowDensityInfo(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + return aniWindow->GetWindowDensityInfo(env); +} + +static ani_boolean GetImmersiveModeEnabledState(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + return aniWindow->GetImmersiveModeEnabledState(env); +} + +static void SetWindowGrayScale(ani_env* env, ani_object obj, ani_long nativeObj, ani_double grayScale) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetWindowGrayScale(env, grayScale); +} + +static ani_object GetWindowSystemBarProperties(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + return aniWindow->GetWindowSystemBarProperties(env); +} + +static ani_boolean IsGestureBackEnabled(ani_env* env, ani_object obj, ani_long nativeObj) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return false; + } + return aniWindow->IsGestureBackEnabled(env); +} + +static void SetGestureBackEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindow is nullptr"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + aniWindow->SetGestureBackEnabled(env, enabled); +} + +static void SetSingleFrameComposerEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + using namespace OHOS::Rosen; + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindow* aniWindow = reinterpret_cast(nativeObj); + if (aniWindow == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindow is nullptr"); + return; + } + aniWindow->SetSingleFrameComposerEnabled(env, enabled); +} + ani_object CreateAniWindow(ani_env* env, OHOS::sptr& window) __attribute__((no_sanitize("cfi"))) { @@ -2929,6 +3513,40 @@ 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 {"setWindowBrightness", "ld:", + reinterpret_cast(SetWindowBrightness)}, + ani_native_function {"getWindowColorSpace", "l:i", + reinterpret_cast(GetWindowColorSpace)}, + ani_native_function {"SetWakeUpScreen", "lz:", + reinterpret_cast(SetWakeUpScreen)}, + ani_native_function {"setSnapshotSkip", "lz:", + reinterpret_cast(SetSnapshotSkip)}, + ani_native_function {"snapshotIgnorePrivacy", "l:C{@ohos.multimedia.image.image.PixelMap}", + reinterpret_cast(SnapshotIgnorePrivacy)}, + ani_native_function {"setWindowContainerColor", "lC{std.core.String}C{std.core.String}:", + reinterpret_cast(setWindowContainerColor)}, + ani_native_function {"getStatusBarProperty", "l:C{@ohos.window.window.StatusBarProperty}", + reinterpret_cast(GetStatusBarProperty)}, + ani_native_function {"setStatusBarColor", "ll:", + reinterpret_cast(SetStatusBarColor)}, + ani_native_function {"isSystemAvoidAreaEnabled", "l:z", + reinterpret_cast(IsSystemAvoidAreaEnabled)}, + ani_native_function {"setSystemAvoidAreaEnabled", "lz:", + reinterpret_cast(SetSystemAvoidAreaEnabled)}, + ani_native_function {"getWindowDensityInfo", "l:C{@ohos.window.window.WindowDensityInfo}", + reinterpret_cast(GetWindowDensityInfo)}, + ani_native_function {"getImmersiveModeEnabledState", "l:z", + reinterpret_cast(GetImmersiveModeEnabledState)}, + ani_native_function {"setWindowGrayScale", "ld:", + reinterpret_cast(SetWindowGrayScale)}, + ani_native_function {"getWindowSystemBarProperties", "l:C{@ohos.window.window.SystemBarProperties}", + reinterpret_cast(GetWindowSystemBarProperties)}, + ani_native_function {"isGestureBackEnabled", "l:z", + reinterpret_cast(IsGestureBackEnabled)}, + ani_native_function {"setGestureBackEnabled", "lz:", + reinterpret_cast(SetGestureBackEnabled)}, + ani_native_function {"setSingleFrameComposerEnabled", "lz:", + reinterpret_cast(SetSingleFrameComposerEnabled)}, ani_native_function {"nativeTransferStatic", "Lstd/interop/ESValue;:Lstd/core/Object;", reinterpret_cast(AniWindow::NativeTransferStatic)}, ani_native_function {"nativeTransferDynamic", "J:Lstd/interop/ESValue;", 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 105024a537..ab78495ca4 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 @@ -16,14 +16,19 @@ #include "ani_window_manager.h" #include +#include #include "ability_context.h" #include "ani.h" #include "ani_window.h" #include "ani_window_stage.h" #include "ani_window_utils.h" +#include "common/include/session_permission.h" #include "permission.h" +#include "pixel_map.h" +#include "pixel_map_taihe_ani.h" #include "singleton_container.h" +#include "sys_cap_util.h" #include "window_helper.h" #include "window_manager.h" #include "window_manager_hilog.h" @@ -36,6 +41,7 @@ using DisplayId = uint64_t; namespace { const std::string PIP_WINDOW = "pip_window"; constexpr int32_t INVALID_COORDINATE = -1; +constexpr uint32_t API_VERSION_18 = 18; } AniWindowManager::AniWindowManager() : registerManager_(std::make_unique()) { @@ -73,6 +79,16 @@ ani_status AniWindowManager::AniWindowManagerInit(ani_env* env) ani_native_function {"createWindowSync", "lC{@ohos.window.window.Configuration}:C{@ohos.window.window.Window}", reinterpret_cast(AniWindowManager::CreateWindow)}, + ani_native_function {"getAllWindowLayoutInfo", "ll:C{escompat.Array}", + reinterpret_cast(AniWindowManager::GetAllWindowLayoutInfo)}, + ani_native_function {"getSnapshot", "ld:C{@ohos.multimedia.image.image.PixelMap}", + reinterpret_cast(AniWindowManager::GetSnapshot)}, + ani_native_function {"getVisibleWindowInfo", "l:C{escompat.Array}", + reinterpret_cast(AniWindowManager::GetVisibleWindowInfo)}, + ani_native_function {"setGestureNavigationEnabled", "lz:", + reinterpret_cast(AniWindowManager::SetGestureNavigationEnabled)}, + ani_native_function {"setWaterMarkImage", "lC{@ohos.multimedia.image.image.PixelMap}z:", + reinterpret_cast(AniWindowManager::SetWaterMarkImage)}, }; if ((ret = env->Namespace_BindNativeFunctions(ns, functions.data(), functions.size())) != ANI_OK) { TLOGE(WmsLogTag::DEFAULT, "[ANI] bind ns func %{public}u", ret); @@ -449,5 +465,148 @@ void AniWindowManager::OnShiftAppWindowFocus(ani_env* env, ani_int sourceWindowI } return ; } + +ani_object AniWindowManager::GetAllWindowLayoutInfo(ani_env* env, ani_long nativeObj, ani_int displayId) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnGetAllWindowLayoutInfo(env, displayId) : nullptr; +} + +ani_object AniWindowManager::OnGetAllWindowLayoutInfo(ani_env* env, ani_int displayId) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + if (static_cast(displayId) < 0 || + SingletonContainer::Get().GetDisplayById(static_cast(displayId)) == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] GetAllWindowLayoutInfo failed, Invalidate params."); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + } + std::vector> infos; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().GetAllWindowLayoutInfo(static_cast(displayId), infos)); + if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] GetAllWindowLayoutInfo failed, ret:%{public}d", ret); + return AniWindowUtils::AniThrowError(env, ret, "failed"); + } + return AniWindowUtils::CreateAniWindowLayoutInfoArray(env, infos); +} + +ani_object AniWindowManager::GetSnapshot(ani_env* env, ani_long nativeObj, ani_int windowId) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnGetSnapshot(env, windowId) : nullptr; +} + +ani_object AniWindowManager::OnGetSnapshot(ani_env* env, ani_int windowId) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + std::shared_ptr pixelMap = nullptr; + WMError result = SingletonContainer::Get().GetSnapshotByWindowId( + static_cast(windowId), pixelMap); + if (result != WMError::WM_OK) { + TLOGW(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot not ok!"); + return AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(result)); + } + if (pixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot is nullptr!"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + auto nativePixelMap = Media::PixelMapAniTaiheAni::CreateEtsPixelMap(env, pixelMap); + if (nativePixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Create native pixelmap is nullptr!"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } + return nativePixelMap; +} + +ani_object AniWindowManager::GetVisibleWindowInfo(ani_env* env, ani_long nativeObj) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + return aniWindowManager != nullptr ? aniWindowManager->OnGetVisibleWindowInfo(env) : nullptr; +} + +ani_object AniWindowManager::OnGetVisibleWindowInfo(ani_env* env) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + uint32_t apiVersion = SysCapUtil::GetApiCompatibleVersion(); + if (apiVersion < API_VERSION_18 && !Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "permission denied! api%{public}u", apaiVersion); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + } else if (apiVersion >= API_VERSION_18 && + !CheckCallingPermission(PermissionConstants::PERMISSION_VISIBLE_WINDOW_INFO)) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "permission denied! api%{public}u", apaiVersion); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + } + std::vector> infos; + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().GetVisibilityWindowInfo(infos)); + if (ret == WmErrorCode::WM_OK) { + TLOGD(WmsLogTag::WMS_ATTRIBUTE, "OnGetVisibleWindowInfo success"); + for (auto it = infos.begin(); it != infos.end();) { + auto windowType = (*it)->GetWindowType(); + if (windowType >= WindowType::APP_MAIN_WINDOW_BASE && windowType < WindowType::APP_MAIN_WINDOW_END) { + it++; + } else { + it = infos.erase(it); + } + } + return AniWindowUtils::CreateAniWindowInfoArray(env, infos); + } else { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "OnGetVisibleWindowInfo failed"); + return AniWindowUtils::AniThrowError(env, ret, "OnGetVisibleWindowInfo failed"); + } +} + +void AniWindowManager::SetGestureNavigationEnabled(ani_env* env, ani_long nativeObj, ani_boolean enabled) +{ + TLOGI(WmsLogTag::WMS_IMMS, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + if (aniWindowManager != nullptr) { + aniWindowManager->OnSetGestureNavigationEnabled(env, enabled); + } else { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindowManager is nullptr"); + } +} + +void AniWindowManager::OnSetGestureNavigationEnabled(ani_env* env, ani_boolean enabled) +{ + TLOGI(WmsLogTag::WMS_IMMS, "Set gesture navigation enable as %{public}d", enabled); + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( + SingletonContainer::Get().SetGestureNavigationEnabled(enabled)); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret, "OnGetVisibleWindowInfo failed"); + } +} + +void AniWindowManager::SetWaterMarkImage(ani_env* env, ani_long nativeObj, ani_object nativePixelMap, ani_boolean enable) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); + if (aniWindowManager != nullptr) { + aniWindowManager->OnSetWaterMarkImage(env, nativePixelMap, enable); + } else { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowManager is nullptr"); + } +} + +void AniWindowManager::OnSetWaterMarkImage(ani_env* env, ani_object nativePixelMap, ani_boolean enable) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + std::shared_ptr pixelMap; + pixelMap = OHOS::Media::PixelMapTaiheAni::GetNativePixelMap(env, nativePixelMap); + if (pixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Failed to convert parameter to PixelMap"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; + } + if (!Permission::IsSystemCalling()) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set watermark image permission denied!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; + } + RSInterfaces::GetInstance().ShowWatermark(pixelMap, enable); +} } // namespace Rosen } // 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 5945bed54e..7bbe5521ca 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 @@ -473,6 +473,71 @@ ani_ref AniWindowStage::OnCreateSubWindow(ani_env* env, ani_string name) } return CreateAniWindowObject(env, window); } + +void AniWindowStage::SetCustomDensity(ani_env* env, ani_object obj, ani_long nativeObj, ani_double density) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnSetCustomDensity(env, density); + } else { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnSetCustomDensity(ani_env* env, ani_double density) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto window = windowScene->GetMainWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetCustomDensity(static_cast(density), false)); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] set density=%{public}f, result=%{public}u", + window->GetWindowId(), window->GetWindowName().c_str(), density, ret); + if (ret != WmErrorCode::WM_OK) { + AniWindowUtils::AniThrowError(env, ret); + } +} + +void AniWindowStage::SetDefaultDensityEnabled(ani_env* env, ani_object obj, ani_long nativeObj, ani_boolean enabled) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + AniWindowStage* aniWindowStage = reinterpret_cast(nativeObj); + if (aniWindowStage != nullptr) { + aniWindowStage->OnSetDefaultDensityEnabled(env, enabled); + } else { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowStage is nullptr"); + } +} + +void AniWindowStage::OnSetDefaultDensityEnabled(ani_env* env, ani_boolean enabled) +{ + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); + auto windowScene = GetWindowScene().lock(); + if (windowScene == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI]windowScene is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + auto window = windowScene->GetMainWindow(); + if (window == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] mainWindow is nullptr!"); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + return; + } + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetDefaultDensityEnabled(enabled)); + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] enabled=%{public}u ret=%{public}u", + window->GetWindowId(), window->GetWindowName().c_str(), enabled, ret); +} } // namespace Rosen } // namespace OHOS 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 1aaf49acc3..8508aed66b 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 @@ -113,6 +113,10 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindowStage::DisableWindowDecor)}, ani_native_function {"setShowOnLockScreenSync", nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, + ani_native_function {"setCustomDensity", "ld:", + reinterpret_cast(AniWindowStage::SetCustomDensity)}, + ani_native_function {"setDefaultDensityEnabled", "lz:", + reinterpret_cast(AniWindowStage::SetDefaultDensityEnabled)}, ani_native_function {"getMainWindowSync", "l:C{@ohos.window.window.Window}", reinterpret_cast(WindowGetMainWindow)}, ani_native_function {"createSubWindowSync", "lC{std.core.String}:C{@ohos.window.window.Window}", 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 048d3bc641..848aaf1cfe 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 @@ -367,6 +367,214 @@ ani_object AniWindowUtils::CreateAniTitleButtonRect(ani_env* env, const TitleBut return aniTitleButtonRect; } +ani_object AniWindowUtils::CreateAniStatusBarProperty(ani_env* env, const SystemBarProperty& prop) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.StatusBarPropertyInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object statusBarProperty; + if (env->Object_New(cls, ctor, &statusBarProperty) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_string contentColor; + if (GetAniString(env, GetHexColor(prop.contentColor_), &contentColor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, statusBarProperty, cls, "contentColor", nullptr, contentColor); + return statusBarProperty; +} + +ani_object AniWindowUtils::CreateAniWindowDensityInfo(ani_env* env, const WindowDensityInfo& info) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.WindowDensityInfoInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object windowDensityInfo; + if (env->Object_New(cls, ctor, &windowDensityInfo) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, windowDensityInfo, cls, "systemDensity", nullptr, + static_cast(info.systemDensity)); + CallAniMethodVoid(env, windowDensityInfo, cls, "defaultDensity", nullptr, + static_cast(info.defaultDensity)); + CallAniMethodVoid(env, windowDensityInfo, cls, "customDensity", nullptr, + static_cast(info.customDensity)); + return windowDensityInfo; +} + +ani_object AniWindowUtils::CreateAniWindowSystemBarProperties(ani_env* env, + const SystemBarProperty& status, const SystemBarProperty& navi) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.SystemBarPropertiesInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object systemBarProperties; + if (env->Object_New(cls, ctor, &systemBarProperties) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_string backgroundColor; + if (GetAniString(env, GetHexColor(status.backgroundColor_), &backgroundColor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, systemBarProperties, cls, "statusBarColor", nullptr, backgroundColor); + ani_string statusBarContentColor; + if (GetAniString(env, GetHexColor(status.contentColor_), &statusBarContentColor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, systemBarProperties, cls, "statusBarContentColor", nullptr, statusBarContentColor); + CallAniMethodVoid(env, systemBarProperties, cls, "isStatusBarLightIcon", nullptr, + status.contentColor_ == SYSTEM_COLOR_WHITE); + ani_string navigationBarColor; + if (GetAniString(env, GetHexColor(navi.backgroundColor_), &navigationBarColor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, systemBarProperties, cls, "navigationBarColor", nullptr, navigationBarColor); + ani_string navigationBarContentColor; + if (GetAniString(env, GetHexColor(navi.contentColor_), &navigationBarContentColor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, systemBarProperties, cls, "navigationBarContentColor", nullptr, navigationBarContentColor); + CallAniMethodVoid(env, systemBarProperties, cls, "isNavigationBarLightIcon", nullptr, + navi.contentColor_ == SYSTEM_COLOR_WHITE); + CallAniMethodVoid(env, systemBarProperties, cls, "enableStatusBarAnimation", nullptr, + status.enableAnimation_); + CallAniMethodVoid(env, systemBarProperties, cls, "enableNavigationBarAnimation", nullptr, + navi.enableAnimation_); + return systemBarProperties; +} + +ani_object AniWindowUtils::CreateAniWindowLayoutInfo(ani_env* env, const WindowLayoutInfo& info) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.WindowLayoutInfoInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object windowLayoutInfo; + if (env->Object_New(cls, ctor, &windowLayoutInfo) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, windowLayoutInfo, cls, "windowRect", nullptr, CreateAniRect(env, info.rect)); + return windowLayoutInfo; +} + +ani_object AniWindowUtils::CreateAniWindowLayoutInfoArray(ani_env* env, + const std::vector>& infos) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.WindowLayoutInfoInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_array_ref windowLayoutInfoArray = nullptr; + if (env->Array_New_Ref(cls, infos.size(), CreateAniUndefined(env), &windowLayoutInfoArray) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] create array failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + for (size_t i = 0; i < infos.size(); i++) { + if (env->Array_Set_Ref(windowLayoutInfoArray, i, CreateAniWindowLayoutInfo(env, *infos[i])) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] create windowLayoutInfoArray failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + } + return windowLayoutInfoArray; +} + +ani_object AniWindowUtils::CreateAniWindowInfo(ani_env* env, const WindowVisibilityInfo& info) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.WindowInfoInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_method ctor; + if (env->Class_FindMethod(cls, "", nullptr, &ctor) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] ctor not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_object windowInfo; + if (env->Object_New(cls, ctor, &windowInfo) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] fail to new obj"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, windowInfo, cls, "rect", nullptr, CreateAniRect(env, info.GetRect())); + CallAniMethodVoid(env, windowInfo, cls, "globalDisplayRect", nullptr, + CreateAniRect(env, info.GetGlobalDisplayRect())); + ani_string bundleName; + if (GetAniString(env, info.GetBundleName(), &bundleName) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, windowInfo, cls, "bundleName", nullptr, bundleName); + ani_string abilityName; + if (GetAniString(env, info.GetAbilityName(), &abilityName) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] create string failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + CallAniMethodVoid(env, windowInfo, cls, "abilityName", nullptr, abilityName); + CallAniMethodVoid(env, windowInfo, cls, "windowId", nullptr, info.GetWindowId()); + env->Object_SetFieldByName_Int(windowInfo, "windowStatusTypeInternal", ani_int(info.GetWindowStatus())); + env->Object_SetFieldByName_Boolean(windowInfo, "isFocusedInternal", ani_boolean(info.IsFocused())); + return windowInfo; +} + +ani_object AniWindowUtils::CreateAniWindowInfoArray(ani_env* env, + const std::vector>& infos) +{ + ani_class cls; + if (env->FindClass("@ohos.window.window.WindowInfoInternal", &cls) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] class not found"); + return AniWindowUtils::CreateAniUndefined(env); + } + ani_array_ref windowInfoArray = nullptr; + if (env->Array_New_Ref(cls, infos.size(), CreateAniUndefined(env), &windowInfoArray) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] create array failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + for (size_t i = 0; i < infos.size(); i++) { + if (env->Array_Set_Ref(windowInfoArray, i, CreateAniWindowInfo(env, *infos[i])) != ANI_OK) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] CreateAniWindowInfo failed"); + return AniWindowUtils::CreateAniUndefined(env); + } + } + return windowInfoArray; +} + ani_object AniWindowUtils::CreateAniWindowArray(ani_env* env, std::vector& windows) { TLOGI(WmsLogTag::DEFAULT, "[ANI]"); @@ -768,7 +976,12 @@ void AniWindowUtils::SetSystemPropertiesWindowType(ani_env* env, const sptrGetType(); - env->Object_SetFieldByName_Int(systemProperties, "typeInternal", ani_int(aniWindowType)); + if (NATIVE_JS_TO_WINDOW_TYPE_MAP.count(aniWindowType) != 0) { + env->Object_SetFieldByName_Int(systemProperties, "typeInternal", + ani_int(NATIVE_JS_TO_WINDOW_TYPE_MAP.at(aniWindowType))); + } else { + env->Object_SetFieldByName_Int(systemProperties, "typeInternal", ani_int(aniWindowType)); + } } void AniWindowUtils::SetSystemPropertiesWindowIsLayoutFullScreen(ani_env* env, const sptr& window, -- Gitee From a11a6bbeb964202fbe226471c57acd7355129758 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 16:09:16 +0800 Subject: [PATCH 02/14] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/ets/@ohos.window.ets | 28 ++++++++++++------- .../window_stage_ani/src/ani_window.cpp | 2 +- .../src/ani_window_stage_module.cpp | 4 +-- 3 files changed, 21 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 906d420099..704d52da88 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 @@ -2192,7 +2192,7 @@ export class WindowInternal implements Window { private native setSystemAvoidAreaEnabled(nativeObj: long, enabled: boolean): void; private native getWindowDensityInfo(nativeObj: long): WindowDensityInfo; private native getImmersiveModeEnabledState(nativeObj: long): boolean; - private native setWindowGrayScale(nativeObj: LockGrantedCallback, grayScale: double): void; + private native setWindowGrayScale(nativeObj: long, grayScale: double): void; private native getWindowSystemBarProperties(nativeObj: long): SystemBarProperties; private native isGestureBackEnabled(nativeObj: long): boolean; private native setGestureBackEnabled(nativeObj: long, enabled: boolean): void; @@ -3164,7 +3164,7 @@ export class WindowInternal implements Window { } public setWakeUpScreen(wakeUp: boolean): void { - return this.getWindowColorSpace(this.nativeObj, wakeUp); + return this.setWakeUpScreen(this.nativeObj, wakeUp); } public setSnapshotSkip(isSkip: boolean): void { @@ -3188,6 +3188,10 @@ export class WindowInternal implements Window { return this.setWindowContainerColor(this.nativeObj, activeColor, inactiveColor); } + public getStatusBarProperty(): StatusBarProperty { + return this.getStatusBarProperty(this.nativeObj); + } + public setStatusBarColor(color: ColorMetrics): Promise { return new Promise((resolve: (value: undefined) => void, reject: (error: BusinessError) => void): void => { taskpool.execute((): void => { @@ -3217,6 +3221,10 @@ export class WindowInternal implements Window { }); } + public getWindowDensityInfo(): WindowDensityInfo { + return this.getWindowDensityInfo(this.nativeObj) as WindowDensityInfoInternal; + } + public getImmersiveModeEnabledState(): boolean { return this.getImmersiveModeEnabledState(this.nativeObj); } @@ -3369,7 +3377,7 @@ export interface Window { setWindowCornerRadius(cornerRadius: double): Promise; setWindowShadowRadius(radius: double): void; setWindowBrightness(brightness: double): Promise; - setWindowBrightness(brightness: DoubleRange, callback: AsyncCallback): void; + setWindowBrightness(brightness: double, callback: AsyncCallback): void; getWindowColorSpace(): ColorSpace; setWakeUpScreen(wakeUp: boolean): void; setSnapshotSkip(isSkip: boolean): void; @@ -3411,10 +3419,10 @@ native function shiftAppWindowFocusSync(nativeObj: long, sourceWindowId: int, ta native function shiftAppWindowPointerEventSync(nativeObj: long, sourceWindowId: int, targetWindowId: int): void; native function createWindowSync(nativeObj: long, config: Configuration): Window; native function getAllWindowLayoutInfo(nativeObj: long, displayId: long): Array; -native function getSnapshot(nativeObj: long, windowId: number); -native function getVisibleWindowInfo(native: long): Array; -native function setGestureNavigationEnabled(native: long, enabled: boolean): void; -native function setWaterMarkImage(native: long, pixelMap: image.PixelMap, enabled: boolean): void; +native function getSnapshot(nativeObj: long, windowId: number): image.PixelMap; +native function getVisibleWindowInfo(nativeObj: long): Array; +native function setGestureNavigationEnabled(nativeObj: long, enabled: boolean): void; +native function setWaterMarkImage(nativeObj: long, pixelMap: image.PixelMap, enabled: boolean): void; export function getLastWindow(ctx: BaseContext): Promise { return new Promise((resolve: (value: Window) => void, reject: (error: BusinessError) => void) => { @@ -3516,7 +3524,7 @@ export function getWindowsByCoordinate(displayId: number, windowNumber?: number, export function getAllWindowLayoutInfo(displayId: long): Promise> { return new Promise>(( resolve: (value: Array) => void, reject: (error: BusinessError) => void): void => { - taskpool.execute((): void => { + taskpool.execute(() => { return getAllWindowLayoutInfo(nativeObj, displayId); }).then((ret: NullishType) => { resolve(ret as Array); @@ -3529,7 +3537,7 @@ export function getAllWindowLayoutInfo(displayId: long): Promise { return new Promise(( resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void): void => { - taskpool.execute((): void => { + taskpool.execute(() => { return getSnapshot(nativeObj, windowId); }).then((ret: NullishType) => { resolve(ret as image.PixelMap); @@ -3542,7 +3550,7 @@ export function getSnapshot(windowId: number): Promise { export function getVisibleWindowInfo(): Promise> { return new Promise>(( resolve: (value: Array) => void, reject: (error: BusinessError) => void): void => { - taskpool.execute((): void => { + taskpool.execute(() => { let visibleWindowInfos = getVisibleWindowInfo(nativeObj); for (let i = 0; i < visibleWindowInfos.length; i++) { visibleWindowInfos[i].windowStatusType = 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 e174cf239a..647a3f03bb 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 @@ -3975,7 +3975,7 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(SetWindowBrightness)}, ani_native_function {"getWindowColorSpace", "l:i", reinterpret_cast(GetWindowColorSpace)}, - ani_native_function {"SetWakeUpScreen", "lz:", + ani_native_function {"setWakeUpScreen", "lz:", reinterpret_cast(SetWakeUpScreen)}, ani_native_function {"setSnapshotSkip", "lz:", reinterpret_cast(SetSnapshotSkip)}, 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 8508aed66b..090908605d 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 @@ -113,9 +113,9 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(AniWindowStage::DisableWindowDecor)}, ani_native_function {"setShowOnLockScreenSync", nullptr, reinterpret_cast(AniWindowStage::SetShowOnLockScreen)}, - ani_native_function {"setCustomDensity", "ld:", + ani_native_function {"setCustomDensitySync", "ld:", reinterpret_cast(AniWindowStage::SetCustomDensity)}, - ani_native_function {"setDefaultDensityEnabled", "lz:", + ani_native_function {"setDefaultDensityEnabledSync", "lz:", reinterpret_cast(AniWindowStage::SetDefaultDensityEnabled)}, ani_native_function {"getMainWindowSync", "l:C{@ohos.window.window.Window}", reinterpret_cast(WindowGetMainWindow)}, -- Gitee From eeb5ed5eccce541f6d780b23b8144e90d50502bc Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 16:28:17 +0800 Subject: [PATCH 03/14] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/src/ani_window.cpp | 2 +- .../window_runtime/window_stage_ani/src/ani_window_utils.cpp | 3 +-- 2 files changed, 2 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 647a3f03bb..f65f9eca12 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 @@ -2895,7 +2895,7 @@ void AniWindow::SetSystemAvoidAreaEnabled(ani_env* env, ani_boolean enabled) } if (!WindowHelper::IsSystemWindow(windowToken_->GetType())) { TLOGE(WmsLogTag::WMS_IMMS, "only system window is valid"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); return; } uint32_t option = 0; 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 2dc378b4e3..c070eb58c2 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 @@ -1094,8 +1094,7 @@ void AniWindowUtils::SetSystemPropertiesDisplayId(ani_env* env, const sptrGetDisplayId(); - CallAniMethodVoid(env, systemProperties, clsName, "displayIdInternal", nullptr, - static_cast(displayId)); + env->Object_SetFieldByName_Long(systemProperties, "displayIdInternal", ani_long(displayId)); } void AniWindowUtils::SetSystemPropertiesWindowName(ani_env* env, const sptr& window, -- Gitee From 4f1833f81a732305163a4325d1711c7e47d91529 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 16:34:51 +0800 Subject: [PATCH 04/14] fix some 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 704d52da88..2007d54dd2 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 @@ -3174,7 +3174,7 @@ export class WindowInternal implements Window { public snapshotIgnorePrivacy(): Promise { return new Promise((resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void): void => { - taskpool.execute((): void => { + taskpool.execute(() => { this.snapshotIgnorePrivacy(this.nativeObj); }).then((ret: NullishType) => { resolve(ret as image.PixelMap); -- Gitee From b23feb162c698dc3a76f4166b113d31b68e9a9b9 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 16:58:04 +0800 Subject: [PATCH 05/14] 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 2007d54dd2..f864a0b649 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 @@ -3175,7 +3175,7 @@ export class WindowInternal implements Window { return new Promise((resolve: (value: image.PixelMap) => void, reject: (error: BusinessError) => void): void => { taskpool.execute(() => { - this.snapshotIgnorePrivacy(this.nativeObj); + return this.snapshotIgnorePrivacy(this.nativeObj); }).then((ret: NullishType) => { resolve(ret as image.PixelMap); }).catch((err: NullishType) => { -- Gitee From 8ce74a158f2e73bde0e94f5c1ea10025fbed7ffb Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 17:10:37 +0800 Subject: [PATCH 06/14] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/ets/@ohos.window.ets | 38 +++++++++++++++++++ 1 file changed, 38 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 f864a0b649..1a33252df9 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 @@ -717,6 +717,44 @@ export enum RectType { RELATIVE_TO_PARENT_WINDOW = 1 } +export interface StatusBarProperty { + contentColor: string; +} + +export class StatusBarPropertyInternal implements StatusBarProperty { + contentColor: string; +} + +export interface WindowLayoutInfo { + windowRect: Rect; +} + +export class WindowLayoutInfoInternal implements WindowLayoutInfo { + windowRect: Rect; +} + +export interface WindowInfo { + rect: Rect; + globalDisplayRect?: Rect; + bundleName: string; + abilityName: string; + windowId: int; + windowStatusType: WindowStatusType; + isFocused?: boolean; +} + +export class WindowInfoInternal implements WindowInfo { + rect: Rect; + globalDisplayRect?: Rect; + bundleName: string; + abilityName: string; + windowId: int; + windowStatusType: WindowStatusType; + isFocused?: boolean; + windowStatusTypeInternal: int; + isFocusedInternal: boolean; +} + export enum BlurStyle { OFF = 0, THIN = 1, -- Gitee From 4737e83438af7086432dfcdf2aaba1fead979b05 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 17:27:03 +0800 Subject: [PATCH 07/14] fix bug Signed-off-by: wangzilin --- .../ani/window_runtime/window_stage_ani/src/ani_window.cpp | 6 +++--- .../window_stage_ani/src/ani_window_manager.cpp | 3 ++- .../window_stage_ani/src/ani_window_utils.cpp | 3 ++- 3 files changed, 7 insertions(+), 5 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 19f58fd278..87a9bf1de1 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 @@ -2865,7 +2865,7 @@ ani_object AniWindow::GetStatusBarProperty(ani_env* env) { if (windowToken_ == nullptr) { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] windowToken_ is nullptr"); - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY);; + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { TLOGE(WmsLogTag::WMS_IMMS, "only main window is allowed"); @@ -2888,7 +2888,7 @@ void AniWindow::SetStatusBarColor(ani_env* env, ani_long color) static_cast(SystemBarSettingFlag::COLOR_SETTING)); WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( windowToken_->SetSystemBarProperty(WindowType::WINDOW_TYPE_STATUS_BAR, property)); - if (ret != WmErrorCode::WM_OK){ + if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::WMS_IMMS, "set status bar property error: %{public}d", ret); AniWindowUtils::AniThrowError(env, ret, "SetStatusBarProperty failed"); } @@ -3055,7 +3055,7 @@ void AniWindow::SetGestureBackEnabled(ani_env* env, ani_boolean enabled) } if (!WindowHelper::IsMainWindow(windowToken_->GetType())) { TLOGE(WmsLogTag::WMS_IMMS, "invalid window type"); - AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); + AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_CALLING); return; } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetGestureBackEnabled(enabled)); 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 ddec353d5e..787ce00695 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 @@ -621,7 +621,8 @@ void AniWindowManager::OnSetGestureNavigationEnabled(ani_env* env, ani_boolean e } } -void AniWindowManager::SetWaterMarkImage(ani_env* env, ani_long nativeObj, ani_object nativePixelMap, ani_boolean enable) +void AniWindowManager::SetWaterMarkImage(ani_env* env, ani_long nativeObj, + ani_object nativePixelMap, ani_boolean enable) { TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); 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 f140f7753d..345d168a5a 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 @@ -467,7 +467,8 @@ ani_object AniWindowUtils::CreateAniWindowSystemBarProperties(ani_env* env, TLOGE(WmsLogTag::WMS_IMMS, "[ANI] create string failed"); return AniWindowUtils::CreateAniUndefined(env); } - CallAniMethodVoid(env, systemBarProperties, cls, "navigationBarContentColor", nullptr, navigationBarContentColor); + CallAniMethodVoid(env, systemBarProperties, cls, "navigationBarContentColor", + nullptr, navigationBarContentColor); CallAniMethodVoid(env, systemBarProperties, cls, "isNavigationBarLightIcon", nullptr, navi.contentColor_ == SYSTEM_COLOR_WHITE); CallAniMethodVoid(env, systemBarProperties, cls, "enableStatusBarAnimation", nullptr, -- Gitee From 4eed512d47275cb7a88d510a77f693410729eb15 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 17:50:48 +0800 Subject: [PATCH 08/14] 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 345d168a5a..75239baac2 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 @@ -471,8 +471,7 @@ ani_object AniWindowUtils::CreateAniWindowSystemBarProperties(ani_env* env, nullptr, navigationBarContentColor); CallAniMethodVoid(env, systemBarProperties, cls, "isNavigationBarLightIcon", nullptr, navi.contentColor_ == SYSTEM_COLOR_WHITE); - CallAniMethodVoid(env, systemBarProperties, cls, "enableStatusBarAnimation", nullptr, - status.enableAnimation_); + CallAniMethodVoid(env, systemBarProperties, cls, "enableStatusBarAnimation", nullptr, status.enableAnimation_); CallAniMethodVoid(env, systemBarProperties, cls, "enableNavigationBarAnimation", nullptr, navi.enableAnimation_); return systemBarProperties; -- Gitee From 722f4713b829403885b39b0814185a5f9adbad71 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 17:53:20 +0800 Subject: [PATCH 09/14] 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 fc1134b63d..158214a088 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 @@ -1636,7 +1636,7 @@ export interface GetWindowsByCoordinateParam { y: number; } -export class GetWindowsByCoordinateParam implements GetWindowsByCoordinateParam{ +export class GetWindowsByCoordinateParamInternal implements GetWindowsByCoordinateParam{ displayId: number; windowNumber: number; x: number; -- Gitee From 8c039c26ebcadee2282ce97f4ace54d36d27db5f Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 19:02:18 +0800 Subject: [PATCH 10/14] fix bug Signed-off-by: wangzilin --- .../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 787ce00695..83bee1752e 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 @@ -507,7 +507,7 @@ void AniWindowManager::OnShiftAppWindowPointerEvent(ani_env* env, ani_int source return; } -ani_object AniWindowManager::GetAllWindowLayoutInfo(ani_env* env, ani_long nativeObj, ani_int displayId) +ani_object AniWindowManager::GetAllWindowLayoutInfo(ani_env* env, ani_long nativeObj, ani_long displayId) { TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); AniWindowManager* aniWindowManager = reinterpret_cast(nativeObj); -- Gitee From 699f620f1d54d31ca8a60d0b7ed451e030aa8b31 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 22:46:19 +0800 Subject: [PATCH 11/14] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window.cpp | 22 ++++++++++++------- .../window_stage_ani/src/ani_window_stage.cpp | 4 ++-- 2 files changed, 16 insertions(+), 10 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 fec4d6e144..fe6115db7a 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 @@ -3052,10 +3052,10 @@ void AniWindow::SetWindowBrightness(ani_env* env, ani_double brightness) AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } - WMError ret = windowToken_->SetBrightness(static_cast(brightness)); - if (ret != WMError::WM_OK) { + WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetBrightness(static_cast(brightness))); + if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "failed"); - AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(ret), "Window set brightness failed"); + AniWindowUtils::AniThrowError(env, ret, "Window set brightness failed"); return; } TLOGI(WmsLogTag::WMS_ATTRIBUTE, "window [%{public}u, %{public}s] set brightness end", @@ -3128,10 +3128,14 @@ ani_object AniWindow::SnapshotIgnorePrivacy(ani_env* env) TLOGE(WmsLogTag::WMS_ATTRIBUTE, "get pixelmap failed, code: %{public}d", ret); return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } + if (pixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "pixelMap is null"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); + } auto nativePixelMap = Media::PixelMapTaiheAni::CreateEtsPixelMap(env, pixelMap); - if (nativePixelMap == nullptr || pixelMap == nullptr) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "native PixelMap is null"); - return AniWindowUtils::CreateAniUndefined(env); + if (nativePixelMap == nullptr) { + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "native pixelMap is null"); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); } TLOGI(WmsLogTag::WMS_ATTRIBUTE, "windowId:%{public}u, WxH=%{public}dx%{public}d", windowToken_->GetWindowId(), pixelMap->GetWidth(), pixelMap->GetHeight()); @@ -3302,11 +3306,13 @@ void AniWindow::SetWindowGrayScale(ani_env* env, ani_double grayScale) TLOGE(WmsLogTag::WMS_ATTRIBUTE, "grayScale should be greater than or equal to 0.0, and should be smaller than or equal to 1.0"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_INVALID_PARAM); + return; } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetGrayScale(static_cast(grayScale))); if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Set window gray scale failed %{public}d", ret); AniWindowUtils::AniThrowError(env, ret, "Set window gray scale failed"); + return; } TLOGI(WmsLogTag::WMS_ATTRIBUTE, "end, window [%{public}u, %{public}s] grayScale=%{public}f", windowToken_->GetWindowId(), windowToken_->GetWindowName().c_str(), grayScale); @@ -3369,7 +3375,7 @@ void AniWindow::SetGestureBackEnabled(ani_env* env, ani_boolean enabled) } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->SetGestureBackEnabled(enabled)); if (ret != WmErrorCode::WM_OK) { - TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Set single frame composer enabled failed, ret is %{public}d", ret); + TLOGE(WmsLogTag::WMS_IMMS, "set failed ret %{public}d", ret); AniWindowUtils::AniThrowError(env, ret, "set failed."); return; } @@ -3383,7 +3389,7 @@ void AniWindow::SetSingleFrameComposerEnabled(ani_env* env, ani_boolean enabled) return; } if (windowToken_ == nullptr) { - TLOGE(WmsLogTag::WMS_IMMS, "windowToken_ is null"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "windowToken_ is null"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_STATE_ABNORMALLY); return; } 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 9e1dcd96c1..f77adf429f 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 @@ -542,7 +542,7 @@ void AniWindowStage::OnSetCustomDensity(ani_env* env, ani_double density) return; } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetCustomDensity(static_cast(density), false)); - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] set density=%{public}f, result=%{public}u", + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] set density=%{public}f, result=%{public}d", window->GetWindowId(), window->GetWindowName().c_str(), density, ret); if (ret != WmErrorCode::WM_OK) { AniWindowUtils::AniThrowError(env, ret); @@ -576,7 +576,7 @@ void AniWindowStage::OnSetDefaultDensityEnabled(ani_env* env, ani_boolean enable return; } WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(window->SetDefaultDensityEnabled(enabled)); - TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] enabled=%{public}u ret=%{public}u", + TLOGI(WmsLogTag::WMS_ATTRIBUTE, "Window [%{public}u,%{public}s] enabled=%{public}u ret=%{public}d", window->GetWindowId(), window->GetWindowName().c_str(), enabled, ret); } } // namespace Rosen -- Gitee From 328bbbf1a765a03dfe302dec1e0d698a16d71216 Mon Sep 17 00:00:00 2001 From: wangzilin Date: Thu, 4 Sep 2025 23:02:21 +0800 Subject: [PATCH 12/14] fix bug Signed-off-by: wangzilin --- .../window_stage_ani/src/ani_window_manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 83bee1752e..f6964e931a 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 @@ -543,11 +543,11 @@ ani_object AniWindowManager::OnGetSnapshot(ani_env* env, ani_double windowId) { TLOGI(WmsLogTag::WMS_ATTRIBUTE, "[ANI]"); std::shared_ptr pixelMap = nullptr; - WMError result = SingletonContainer::Get().GetSnapshotByWindowId( - static_cast(windowId), pixelMap); - if (result != WMError::WM_OK) { + WmErrorCode result = WM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get().GetSnapshotByWindowId( + static_cast(windowId), pixelMap)); + if (result != WmErrorCode::WM_OK) { TLOGW(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot not ok!"); - return AniWindowUtils::AniThrowError(env, WM_JS_TO_ERROR_CODE_MAP.at(result)); + return AniWindowUtils::AniThrowError(env, result); } if (pixelMap == nullptr) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot is nullptr!"); -- Gitee From 465ffd650a2b856ce49c74a3199a62724da684ad Mon Sep 17 00:00:00 2001 From: wangzilin Date: Fri, 5 Sep 2025 09:43:17 +0800 Subject: [PATCH 13/14] fix bug Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/ets/@ohos.window.ets | 2 +- .../window_stage_ani/src/ani_window_manager.cpp | 7 +++++-- .../window_stage_ani/src/ani_window_utils.cpp | 2 +- 3 files changed, 7 insertions(+), 4 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 820165a1fb..074bd31547 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 @@ -1636,7 +1636,7 @@ export interface GetWindowsByCoordinateParam { y: number; } -export class GetWindowsByCoordinateParamInternal implements GetWindowsByCoordinateParam{ +export class GetWindowsByCoordinateParamInternal implements GetWindowsByCoordinateParam { displayId: number; windowNumber: number; x: number; 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 f6964e931a..9cd579dc36 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 @@ -578,7 +578,7 @@ ani_object AniWindowManager::OnGetVisibleWindowInfo(ani_env* env) } else if (apiVersion >= API_VERSION_18 && !CheckCallingPermission(PermissionConstants::PERMISSION_VISIBLE_WINDOW_INFO)) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "permission denied! api%{public}u", apiVersion); - return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NO_PERMISSION); } std::vector> infos; WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( @@ -608,6 +608,7 @@ void AniWindowManager::SetGestureNavigationEnabled(ani_env* env, ani_long native aniWindowManager->OnSetGestureNavigationEnabled(env, enabled); } else { TLOGE(WmsLogTag::WMS_IMMS, "[ANI] aniWindowManager is nullptr"); + return; } } @@ -617,7 +618,8 @@ void AniWindowManager::OnSetGestureNavigationEnabled(ani_env* env, ani_boolean e WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().SetGestureNavigationEnabled(enabled)); if (ret != WmErrorCode::WM_OK) { - AniWindowUtils::AniThrowError(env, ret, "OnGetVisibleWindowInfo failed"); + AniWindowUtils::AniThrowError(env, ret, "SetGestureNavigationEnabled failed"); + return; } } @@ -630,6 +632,7 @@ void AniWindowManager::SetWaterMarkImage(ani_env* env, ani_long nativeObj, aniWindowManager->OnSetWaterMarkImage(env, nativePixelMap, enable); } else { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowManager is nullptr"); + return; } } 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 75239baac2..db72b9b462 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 @@ -554,7 +554,7 @@ ani_object AniWindowUtils::CreateAniWindowInfo(ani_env* env, const WindowVisibil CallAniMethodVoid(env, windowInfo, cls, "abilityName", nullptr, abilityName); CallAniMethodVoid(env, windowInfo, cls, "windowId", nullptr, info.GetWindowId()); env->Object_SetFieldByName_Int(windowInfo, "windowStatusTypeInternal", ani_int(info.GetWindowStatus())); - env->Object_SetFieldByName_Boolean(windowInfo, "isFocusedInternal", ani_boolean(info.IsFocused())); + env->Object_SetFieldByName_Boolean(windowInfo, "isFocusedInternal", ani_boolean(info.IsFocused())); return windowInfo; } -- Gitee From 4407c0b07013e6ad527a48e3bf017b3ab129e76c Mon Sep 17 00:00:00 2001 From: wangzilin Date: Fri, 5 Sep 2025 11:11:35 +0800 Subject: [PATCH 14/14] fix bug Signed-off-by: wangzilin --- .../window_runtime/window_stage_ani/src/ani_window.cpp | 8 +++++--- .../window_stage_ani/src/ani_window_manager.cpp | 3 ++- .../window_stage_ani/src/ani_window_stage.cpp | 3 +++ 3 files changed, 10 insertions(+), 4 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 fe6115db7a..ae04175994 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 @@ -3080,6 +3080,7 @@ void AniWindow::SetWakeUpScreen(ani_env* env, ani_boolean wakeUp) if (!Permission::IsSystemCalling() && !Permission::IsStartByHdcd()) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "set wake up screen permission denied!"); AniWindowUtils::AniThrowError(env, WmErrorCode::WM_ERROR_NOT_SYSTEM_APP); + return; } if (windowToken_ == nullptr) { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] windowToken_ is nullptr"); @@ -3245,7 +3246,7 @@ void AniWindow::SetSystemAvoidAreaEnabled(ani_env* env, ani_boolean enabled) uint32_t option = 0; WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at(windowToken_->GetAvoidAreaOption(option)); if (ret != WmErrorCode::WM_OK) { - TLOGE(WmsLogTag::WMS_IMMS, "SetSystemAvoidAreaEnabled failed"); + TLOGE(WmsLogTag::WMS_IMMS, "get failed, ret %{public}d", ret); AniWindowUtils::AniThrowError(env, ret); return; } @@ -3258,6 +3259,7 @@ void AniWindow::SetSystemAvoidAreaEnabled(ani_env* env, ani_boolean enabled) if (ret != WmErrorCode::WM_OK) { TLOGE(WmsLogTag::WMS_IMMS, "failed, ret %{public}d", ret); AniWindowUtils::AniThrowError(env, ret, "set system avoid area enabled failed."); + return; } } @@ -4407,9 +4409,9 @@ ani_status OHOS::Rosen::ANI_Window_Constructor(ani_vm *vm, uint32_t *result) reinterpret_cast(SetGestureBackEnabled)}, ani_native_function {"setSingleFrameComposerEnabled", "lz:", reinterpret_cast(SetSingleFrameComposerEnabled)}, - ani_native_function {"nativeTransferStatic", "Lstd/interop/ESValue;:Lstd/core/Object;", + ani_native_function {"nativeTransferStatic", "C{std.interop.ESValue}:C{std.core.Object}", reinterpret_cast(AniWindow::NativeTransferStatic)}, - ani_native_function {"nativeTransferDynamic", "J:Lstd/interop/ESValue;", + ani_native_function {"nativeTransferDynamic", "l:C{std.interop.ESValue}", reinterpret_cast(AniWindow::NativeTransferDynamic)}, }; for (auto method : methods) { 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 9cd579dc36..f979be7d5d 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 @@ -546,7 +546,7 @@ ani_object AniWindowManager::OnGetSnapshot(ani_env* env, ani_double windowId) WmErrorCode result = WM_JS_TO_ERROR_CODE_MAP.at(SingletonContainer::Get().GetSnapshotByWindowId( static_cast(windowId), pixelMap)); if (result != WmErrorCode::WM_OK) { - TLOGW(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot not ok!"); + TLOGE(WmsLogTag::WMS_ATTRIBUTE, "Get snapshot not ok!"); return AniWindowUtils::AniThrowError(env, result); } if (pixelMap == nullptr) { @@ -618,6 +618,7 @@ void AniWindowManager::OnSetGestureNavigationEnabled(ani_env* env, ani_boolean e WmErrorCode ret = WM_JS_TO_ERROR_CODE_MAP.at( SingletonContainer::Get().SetGestureNavigationEnabled(enabled)); if (ret != WmErrorCode::WM_OK) { + TLOGE(WmsLogTag::WMS_IMMS, "failed, ret %{public}d", ret); AniWindowUtils::AniThrowError(env, ret, "SetGestureNavigationEnabled failed"); return; } 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 f77adf429f..4057478afb 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 @@ -523,6 +523,7 @@ void AniWindowStage::SetCustomDensity(ani_env* env, ani_object obj, ani_long nat aniWindowStage->OnSetCustomDensity(env, density); } else { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowStage is nullptr"); + return; } } @@ -546,6 +547,7 @@ void AniWindowStage::OnSetCustomDensity(ani_env* env, ani_double density) window->GetWindowId(), window->GetWindowName().c_str(), density, ret); if (ret != WmErrorCode::WM_OK) { AniWindowUtils::AniThrowError(env, ret); + return; } } @@ -557,6 +559,7 @@ void AniWindowStage::SetDefaultDensityEnabled(ani_env* env, ani_object obj, ani_ aniWindowStage->OnSetDefaultDensityEnabled(env, enabled); } else { TLOGE(WmsLogTag::WMS_ATTRIBUTE, "[ANI] aniWindowStage is nullptr"); + return; } } -- Gitee