Showing
3 changed files
with
67 additions
and
45 deletions
| @@ -98,4 +98,8 @@ export class DeviceUtil { | @@ -98,4 +98,8 @@ export class DeviceUtil { | ||
| 98 | static isTablet(): boolean { | 98 | static isTablet(): boolean { |
| 99 | return deviceInfo.deviceType == 'tablet'; | 99 | return deviceInfo.deviceType == 'tablet'; |
| 100 | } | 100 | } |
| 101 | + | ||
| 102 | + static is2in1(): boolean { | ||
| 103 | + return deviceInfo.deviceType == '2in1'; | ||
| 104 | + } | ||
| 101 | } | 105 | } |
| @@ -43,6 +43,9 @@ export class WindowModel { | @@ -43,6 +43,9 @@ export class WindowModel { | ||
| 43 | return this.windowClass as window.Window | 43 | return this.windowClass as window.Window |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | + /** | ||
| 47 | + * @deprecated 应用整体全屏,不需要再设置全屏与否了。 | ||
| 48 | + */ | ||
| 46 | setMainWindowFullScreen(fullScreen: boolean) { | 49 | setMainWindowFullScreen(fullScreen: boolean) { |
| 47 | if (deviceInfo.deviceType != "phone") { | 50 | if (deviceInfo.deviceType != "phone") { |
| 48 | return | 51 | return |
| @@ -140,6 +143,9 @@ export class WindowModel { | @@ -140,6 +143,9 @@ export class WindowModel { | ||
| 140 | return this.windowClass?.getWindowProperties() | 143 | return this.windowClass?.getWindowProperties() |
| 141 | } | 144 | } |
| 142 | 145 | ||
| 146 | + /** | ||
| 147 | + * @deprecated 应用整体全屏,不需要再设置全屏与否了。 | ||
| 148 | + */ | ||
| 143 | setWindowLayoutFullScreen(isFullScreen: boolean) { | 149 | setWindowLayoutFullScreen(isFullScreen: boolean) { |
| 144 | this.isFullScreen = isFullScreen | 150 | this.isFullScreen = isFullScreen |
| 145 | this.windowClass?.setWindowLayoutFullScreen(isFullScreen) | 151 | this.windowClass?.setWindowLayoutFullScreen(isFullScreen) |
| 1 | import AbilityConstant from '@ohos.app.ability.AbilityConstant'; | 1 | import AbilityConstant from '@ohos.app.ability.AbilityConstant'; |
| 2 | import app from '@system.app'; | 2 | import app from '@system.app'; |
| 3 | -import hilog from '@ohos.hilog'; | ||
| 4 | import UIAbility from '@ohos.app.ability.UIAbility'; | 3 | import UIAbility from '@ohos.app.ability.UIAbility'; |
| 5 | import Want from '@ohos.app.ability.Want'; | 4 | import Want from '@ohos.app.ability.Want'; |
| 6 | import window from '@ohos.window'; | 5 | import window from '@ohos.window'; |
| 7 | import { BusinessError } from '@ohos.base'; | 6 | import { BusinessError } from '@ohos.base'; |
| 8 | -import { DeviceUtil, EmitterEventId, EmitterUtils, WindowModel } from 'wdKit'; | 7 | +import { DeviceUtil, EmitterEventId, EmitterUtils, Logger, WindowModel } from 'wdKit'; |
| 9 | import { ConfigurationConstant } from '@kit.AbilityKit'; | 8 | import { ConfigurationConstant } from '@kit.AbilityKit'; |
| 10 | import { StartupManager } from '../startupmanager/StartupManager'; | 9 | import { StartupManager } from '../startupmanager/StartupManager'; |
| 11 | -import { UIContext } from '@ohos.arkui.UIContext'; | ||
| 12 | 10 | ||
| 13 | let floatWindowClass: window.Window | null = null; | 11 | let floatWindowClass: window.Window | null = null; |
| 12 | +const TAG = 'EntryAbility' | ||
| 14 | 13 | ||
| 15 | export default class EntryAbility extends UIAbility { | 14 | export default class EntryAbility extends UIAbility { |
| 16 | onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { | 15 | onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { |
| 17 | StartupManager.sharedInstance().appOnCreate(want, launchParam, this.context) | 16 | StartupManager.sharedInstance().appOnCreate(want, launchParam, this.context) |
| 18 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); | 17 | + Logger.info(TAG, 'Ability onCreate'); |
| 19 | 18 | ||
| 20 | // 还没深色模式需求,暂直接不跟随系统。 | 19 | // 还没深色模式需求,暂直接不跟随系统。 |
| 21 | this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT); | 20 | this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT); |
| @@ -32,13 +31,13 @@ export default class EntryAbility extends UIAbility { | @@ -32,13 +31,13 @@ export default class EntryAbility extends UIAbility { | ||
| 32 | } | 31 | } |
| 33 | 32 | ||
| 34 | onDestroy(): void { | 33 | onDestroy(): void { |
| 35 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); | 34 | + Logger.info(TAG, 'Ability onDestroy'); |
| 36 | StartupManager.sharedInstance().appOnDestory() | 35 | StartupManager.sharedInstance().appOnDestory() |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | onWindowStageCreate(windowStage: window.WindowStage): void { | 38 | onWindowStageCreate(windowStage: window.WindowStage): void { |
| 40 | // Main window is created, set main page for this ability | 39 | // Main window is created, set main page for this ability |
| 41 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); | 40 | + Logger.info(TAG, 'Ability onWindowStageCreate'); |
| 42 | WindowModel.shared.setWindowStage(windowStage); | 41 | WindowModel.shared.setWindowStage(windowStage); |
| 43 | // 2. 获取布局避让遮挡的区域 | 42 | // 2. 获取布局避让遮挡的区域 |
| 44 | const windowClass: window.Window = windowStage.getMainWindowSync(); // 获取应用主窗口 | 43 | const windowClass: window.Window = windowStage.getMainWindowSync(); // 获取应用主窗口 |
| @@ -57,72 +56,50 @@ export default class EntryAbility extends UIAbility { | @@ -57,72 +56,50 @@ export default class EntryAbility extends UIAbility { | ||
| 57 | // 音频悬浮窗初始移动位置604为ui高度 | 56 | // 音频悬浮窗初始移动位置604为ui高度 |
| 58 | let initMoveY = vp2px(604) | 57 | let initMoveY = vp2px(604) |
| 59 | 58 | ||
| 60 | - | ||
| 61 | - // 在普通phone/折叠屏/tablet设备上以沉浸式(全屏)启动 | ||
| 62 | - if (DeviceUtil.isPhone() || DeviceUtil.isTablet()) { | ||
| 63 | - // 设置窗口的布局是否为沉浸式布局 | ||
| 64 | - // 沉浸式布局是指布局不避让状态栏与导航栏,组件可能产生与其重叠的情况。 | ||
| 65 | - // 非沉浸式布局是指布局避让状态栏与导航栏,组件不会与其重叠。 | ||
| 66 | - // windowClass.setWindowLayoutFullScreen(true) | ||
| 67 | - // 设置窗口全屏模式时窗口内导航栏、状态栏的属性 | ||
| 68 | - // windowClass.setWindowSystemBarProperties({ | ||
| 69 | - // statusBarContentColor: "#FFFFFF" | ||
| 70 | - // }) | ||
| 71 | - | ||
| 72 | - // 设置启动时窗口的显示方向属性, | ||
| 73 | - // 普通phone以PORTRAIT/竖屏显示模式启动 | ||
| 74 | - // 折叠屏和tablet是以AUTO_ROTATION_RESTRICTED/受开关控制的自动旋转模式启动 | ||
| 75 | - WindowModel.shared.setPreferredOrientation(window.Orientation.PORTRAIT) | ||
| 76 | - .then(() => { | ||
| 77 | - hilog.info(0x0000, 'testTag', 'setPreferredOrientation Succeeded'); | ||
| 78 | - }) | ||
| 79 | - .catch((err: Error) => { | ||
| 80 | - hilog.error(0x0000, 'testTag', | ||
| 81 | - `setPreferredOrientation catch, error error.name : ${err.name}, error.message:${err.message}`); | ||
| 82 | - }) | ||
| 83 | - } | 59 | + this.onWindowSetup(windowClass) |
| 84 | 60 | ||
| 85 | //../../../../../../features/wdLogin/src/main/ets/pages/launchPage/LaunchPage | 61 | //../../../../../../features/wdLogin/src/main/ets/pages/launchPage/LaunchPage |
| 86 | windowStage.loadContent('pages/launchPage/LaunchPage', (err, data) => { | 62 | windowStage.loadContent('pages/launchPage/LaunchPage', (err, data) => { |
| 87 | if (err.code) { | 63 | if (err.code) { |
| 88 | - hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); | 64 | + Logger.error(TAG, 'Failed to load the content. Cause: ' + JSON.stringify(err) ?? ''); |
| 89 | return; | 65 | return; |
| 90 | } | 66 | } |
| 91 | - hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); | 67 | + Logger.info(TAG, 'Succeeded in loading the content. Data: ' + JSON.stringify(data) ?? ''); |
| 92 | }); | 68 | }); |
| 93 | // 1.创建悬浮窗 | 69 | // 1.创建悬浮窗 |
| 94 | windowStage.createSubWindow('subWindow', (err: BusinessError, data) => { | 70 | windowStage.createSubWindow('subWindow', (err: BusinessError, data) => { |
| 95 | let errCode: number = err.code; | 71 | let errCode: number = err.code; |
| 96 | if (errCode) { | 72 | if (errCode) { |
| 97 | - console.error('floatWindowClass Failed to create the subwindow. Cause: ' + JSON.stringify(err)); | 73 | + Logger.error('floatWindowClass Failed to create the subwindow. Cause: ' + JSON.stringify(err)); |
| 98 | return; | 74 | return; |
| 99 | } | 75 | } |
| 100 | - console.info('floatWindowClass Succeeded in creating the subwindow. Data: ' + JSON.stringify(data)); | 76 | + Logger.info('floatWindowClass Succeeded in creating the subwindow. Data: ' + JSON.stringify(data)); |
| 101 | floatWindowClass = data; | 77 | floatWindowClass = data; |
| 102 | AppStorage.setOrCreate('floatWindowClass', floatWindowClass); | 78 | AppStorage.setOrCreate('floatWindowClass', floatWindowClass); |
| 103 | // 2.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。 | 79 | // 2.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。 |
| 104 | floatWindowClass.moveWindowTo(0, initMoveY, (err: BusinessError) => { | 80 | floatWindowClass.moveWindowTo(0, initMoveY, (err: BusinessError) => { |
| 105 | let errCode: number = err.code; | 81 | let errCode: number = err.code; |
| 106 | if (errCode) { | 82 | if (errCode) { |
| 107 | - console.error('floatWindowClass Failed to move the window. Cause:' + JSON.stringify(err)); | 83 | + Logger.error('floatWindowClass Failed to move the window. Cause:' + JSON.stringify(err)); |
| 108 | return; | 84 | return; |
| 109 | } | 85 | } |
| 110 | - console.info('floatWindowClass Succeeded in moving the window.'); | 86 | + Logger.info('floatWindowClass Succeeded in moving the window.'); |
| 111 | }); | 87 | }); |
| 112 | // 3.为悬浮窗加载对应的目标页面。 | 88 | // 3.为悬浮窗加载对应的目标页面。 |
| 113 | floatWindowClass.setUIContent("pages/view/AudioComponent", (err: BusinessError) => { | 89 | floatWindowClass.setUIContent("pages/view/AudioComponent", (err: BusinessError) => { |
| 114 | let errCode: number = err.code; | 90 | let errCode: number = err.code; |
| 115 | if (errCode) { | 91 | if (errCode) { |
| 116 | - console.error('floatWindowClass Failed to load the content. Cause:' + JSON.stringify(err)); | 92 | + Logger.error('floatWindowClass Failed to load the content. Cause:' + JSON.stringify(err)); |
| 117 | return; | 93 | return; |
| 118 | } | 94 | } |
| 119 | - console.info('floatWindowClass Succeeded in loading the content.'); | 95 | + Logger.info('floatWindowClass Succeeded in loading the content.'); |
| 120 | let color: string = 'rgba(0,0,0,0)'; | 96 | let color: string = 'rgba(0,0,0,0)'; |
| 121 | try { | 97 | try { |
| 122 | (floatWindowClass as window.Window).setWindowBackgroundColor(color); | 98 | (floatWindowClass as window.Window).setWindowBackgroundColor(color); |
| 123 | } catch (exception) { | 99 | } catch (exception) { |
| 124 | - console.error('Failed to set the background color. Cause: ' + JSON.stringify(exception)); | ||
| 125 | - }; | 100 | + Logger.error('Failed to set the background color. Cause: ' + JSON.stringify(exception)); |
| 101 | + } | ||
| 102 | + ; | ||
| 126 | }); | 103 | }); |
| 127 | 104 | ||
| 128 | floatWindowClass.on('windowEvent', (data) => { | 105 | floatWindowClass.on('windowEvent', (data) => { |
| @@ -132,33 +109,68 @@ export default class EntryAbility extends UIAbility { | @@ -132,33 +109,68 @@ export default class EntryAbility extends UIAbility { | ||
| 132 | }); | 109 | }); |
| 133 | } | 110 | } |
| 134 | 111 | ||
| 112 | + public async onWindowSetup(mainWindow: window.Window) { | ||
| 113 | + // 在普通phone/折叠屏/tablet设备上以沉浸式(全屏)启动 | ||
| 114 | + if (DeviceUtil.isPhone() || DeviceUtil.isTablet()) { | ||
| 115 | + // 设置窗口的布局是否为沉浸式布局 | ||
| 116 | + // 沉浸式布局是指布局不避让状态栏与导航栏,组件可能产生与其重叠的情况。 | ||
| 117 | + // 非沉浸式布局是指布局避让状态栏与导航栏,,组件不会与其重叠 | ||
| 118 | + mainWindow.setWindowLayoutFullScreen(true) | ||
| 119 | + //设置窗口全屏模式时窗口内导航栏、状态栏的属性 | ||
| 120 | + mainWindow.setWindowSystemBarProperties({ | ||
| 121 | + //statusBarColor:'#000000' | ||
| 122 | + statusBarContentColor: '#FFFFFF' | ||
| 123 | + }) | ||
| 124 | + mainWindow.setSpecificSystemBarEnabled('status', true) | ||
| 125 | + | ||
| 126 | + // 设置启动时窗口的显示方向属性, | ||
| 127 | + // 普通phone以PORTRAIT/竖屏显示模式启动 | ||
| 128 | + // 折叠屏和tablet是以AUTO_ROTATION_RESTRICTED/受开关控制的自动旋转模式启动 | ||
| 129 | + WindowModel.shared.setPreferredOrientation(window.Orientation.PORTRAIT) | ||
| 130 | + .then(() => { | ||
| 131 | + Logger.info(TAG, 'setPreferredOrientation Succeeded'); | ||
| 132 | + }) | ||
| 133 | + .catch((err: Error) => { | ||
| 134 | + Logger.info(TAG, | ||
| 135 | + `setPreferredOrientation catch, error error.name : ${err.name}, error.message:${err.message}`); | ||
| 136 | + }) | ||
| 137 | + } else if (DeviceUtil.is2in1()) { | ||
| 138 | + // 2in1(PC)设备不支持旋转(无横竖屏模式),会以默认窗口(非全屏)显示模式启动Logger.info(TAG,`start at 2in1 window device ) | ||
| 139 | + Logger.info(TAG, 'start at 2in1 window device') | ||
| 140 | + } else { | ||
| 141 | + // 轻量级智能穿戴/lite wearable device | ||
| 142 | + Logger.info(TAG, 'start at other type device') | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + } | ||
| 146 | + | ||
| 135 | destroyFloatWindow() { | 147 | destroyFloatWindow() { |
| 136 | (floatWindowClass as window.Window).destroyWindow((err: BusinessError) => { | 148 | (floatWindowClass as window.Window).destroyWindow((err: BusinessError) => { |
| 137 | let errCode: number = err.code; | 149 | let errCode: number = err.code; |
| 138 | if (errCode) { | 150 | if (errCode) { |
| 139 | - console.error('floatWindowClass Failed to destroy the window. Cause: ' + JSON.stringify(err)); | 151 | + Logger.error('floatWindowClass Failed to destroy the window. Cause: ' + JSON.stringify(err)); |
| 140 | return; | 152 | return; |
| 141 | } | 153 | } |
| 142 | - console.info('floatWindowClass Succeeded in destroying the window.'); | 154 | + Logger.info('floatWindowClass Succeeded in destroying the window.'); |
| 143 | }); | 155 | }); |
| 144 | } | 156 | } |
| 145 | 157 | ||
| 146 | onWindowStageDestroy(): void { | 158 | onWindowStageDestroy(): void { |
| 147 | // Main window is destroyed, release UI related resources | 159 | // Main window is destroyed, release UI related resources |
| 148 | this.destroyFloatWindow() | 160 | this.destroyFloatWindow() |
| 149 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); | 161 | + Logger.info(TAG, 'Ability onWindowStageDestroy'); |
| 150 | } | 162 | } |
| 151 | 163 | ||
| 152 | onForeground(): void { | 164 | onForeground(): void { |
| 153 | // Ability has brought to foreground | 165 | // Ability has brought to foreground |
| 154 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); | 166 | + Logger.info(TAG, 'Ability onForeground'); |
| 155 | 167 | ||
| 156 | EmitterUtils.sendEmptyEvent(EmitterEventId.APP_ENTER_FOREGROUD) | 168 | EmitterUtils.sendEmptyEvent(EmitterEventId.APP_ENTER_FOREGROUD) |
| 157 | } | 169 | } |
| 158 | 170 | ||
| 159 | onBackground(): void { | 171 | onBackground(): void { |
| 160 | // Ability has back to background | 172 | // Ability has back to background |
| 161 | - hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); | 173 | + Logger.info(TAG, 'Ability onBackground'); |
| 162 | 174 | ||
| 163 | EmitterUtils.sendEmptyEvent(EmitterEventId.APP_ENTER_BACKGROUD) | 175 | EmitterUtils.sendEmptyEvent(EmitterEventId.APP_ENTER_BACKGROUD) |
| 164 | } | 176 | } |
-
Please register or login to post a comment