From 28a96ca56e1fcbfb6c4f144085db2623e12a58a1 Mon Sep 17 00:00:00 2001 From: d30044417 Date: Mon, 22 Dec 2025 11:05:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20WindowUtil=E5=8F=96=E6=B6=88=E7=9B=91?= =?UTF-8?q?=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ets/component/MultipleImageComponent.ets | 2 + .../src/main/ets/utils/WindowUtil.ets | 65 ++++++++++--------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/multipleimagelibrary/src/main/ets/component/MultipleImageComponent.ets b/multipleimagelibrary/src/main/ets/component/MultipleImageComponent.ets index f33e804..96e613a 100644 --- a/multipleimagelibrary/src/main/ets/component/MultipleImageComponent.ets +++ b/multipleimagelibrary/src/main/ets/component/MultipleImageComponent.ets @@ -18,6 +18,7 @@ import { display } from '@kit.ArkUI'; import { CommonConstants } from '../constants/CommonConstants'; import { BreakpointType, BreakpointTypeEnum } from '../utils/BreakpointSystem'; import Logger from '../utils/Logger'; +import { WindowUtil } from '../utils/WindowUtil'; import { DataSource, PhotoData } from '../viewmodel/DataSource'; const TAG: string = '[Index]' @@ -66,6 +67,7 @@ export struct MultipleImageComponent { aboutToDisappear(): void { try { display?.off('change'); + WindowUtil.unRegisterBreakPoint(); } catch (error) { Logger.error(TAG, `Failed to unregister the callback for display changes. Cause: ${error.message}`); } diff --git a/multipleimagelibrary/src/main/ets/utils/WindowUtil.ets b/multipleimagelibrary/src/main/ets/utils/WindowUtil.ets index 1110666..109eff4 100644 --- a/multipleimagelibrary/src/main/ets/utils/WindowUtil.ets +++ b/multipleimagelibrary/src/main/ets/utils/WindowUtil.ets @@ -31,42 +31,33 @@ export class WindowUtil { const uiContext: UIContext = WindowUtil.windowClass.getUIContext(); WindowUtil.uiContext = uiContext; AppStorage.setOrCreate(CommonConstants.KEY_PREFIX_SYSTEM_UICONTEXT, uiContext); - WindowUtil.registerBreakPoint(windowStage); - WindowUtil.requestFullScreen(windowStage); + WindowUtil.registerBreakPoint(WindowUtil.windowClass); + WindowUtil.requestFullScreen(WindowUtil.windowClass); } catch (err) { Logger.error(TAG, `WindowUtil initialize failed. Cause: ${err.code} ${err.message}`); } } - public static requestFullScreen(windowStage: window.WindowStage): void { - windowStage.getMainWindow((err: BusinessError, data: window.Window) => { - if (err.code) { - return; - } - let sysBarProps: window.SystemBarProperties = { statusBarContentColor: '#FFFFFF' }; - data.setWindowSystemBarProperties(sysBarProps); - const windowClass: window.Window = data; - // Realize the immersive effect. - try { - const promise: Promise = windowClass.setWindowLayoutFullScreen(true); - promise.then(() => { - Logger.info(TAG, 'Succeeded in setting the window layout to full-screen mode.'); - }).catch((err: BusinessError) => { - Logger.error(TAG, - `Failed to set the window layout to full-screen mode. Cause: ${err.code}, ${err.message}`); - }); - } catch { - Logger.error(TAG, 'Failed to set the window layout to full-screen mode.'); - } - }); + public static requestFullScreen(data: window.Window): void { + let sysBarProps: window.SystemBarProperties = { statusBarContentColor: '#FFFFFF' }; + data.setWindowSystemBarProperties(sysBarProps); + const windowClass: window.Window = data; + // Realize the immersive effect. + try { + const promise: Promise = windowClass.setWindowLayoutFullScreen(true); + promise.then(() => { + Logger.info(TAG, 'Succeeded in setting the window layout to full-screen mode.'); + }).catch((err: BusinessError) => { + Logger.error(TAG, + `Failed to set the window layout to full-screen mode. Cause: ${err.code}, ${err.message}`); + }); + } catch { + Logger.error(TAG, 'Failed to set the window layout to full-screen mode.'); + } } - public static registerBreakPoint(windowStage: window.WindowStage) { - windowStage.getMainWindow((err: BusinessError, data: window.Window) => { - if (err.code) { - Logger.error(TAG, `Failed to get main window: ${err.message}`); - return; - } + public static registerBreakPoint(data: window.Window) { + try { BreakpointSystem.getInstance().updateWidthBp(data); let avoidArea = data.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR); AppStorage.setOrCreate(CommonConstants.KEY_PREFIX_NAVIGATOR_BAR_HEIGHT, @@ -82,7 +73,21 @@ export class WindowUtil { WindowUtil.setAvoidArea(avoidAreaOption.type, avoidAreaOption.area); } }); - }) + } catch (e) { + const error = e as BusinessError; + Logger.error(TAG, + `Register avoidAreaChange or windowSizeChange failed. code: ${error.code}, message: ${error.message}`); + } + } + + public static unRegisterBreakPoint() { + try { + WindowUtil.windowClass?.off('windowSizeChange'); + WindowUtil.windowClass?.off('avoidAreaChange'); + } catch (error) { + const err: BusinessError = error as BusinessError; + Logger.error(TAG, `windowClass off failed. code: ${err.code}, message: ${err.message}`); + } } // Get status bar height and indicator height. -- Gitee