From 00f24d1ecf366a79048adf4b0723d65a4979922e Mon Sep 17 00:00:00 2001 From: hdw Date: Fri, 6 Jun 2025 16:07:28 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E4=BF=AE=E6=94=B9=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E6=92=AD=E6=94=BE=E9=BB=91=E5=B1=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/src/main/ets/utils/AvPlayerUtil.ets | 124 +++++++++--------- .../base/src/main/ets/utils/PipWindowUtil.ets | 10 +- features/detail/src/main/ets/view/Live.ets | 4 +- .../detail/src/main/ets/view/LiverHeader.ets | 2 +- .../src/main/ets/view/ProductDetail.ets | 2 +- .../detail/src/main/ets/view/ProductHome.ets | 2 +- .../main/ets/entryability/EntryAbility.ets | 2 - .../main/ets/secondability/SecondAbility.ets | 1 - 8 files changed, 76 insertions(+), 71 deletions(-) diff --git a/commons/base/src/main/ets/utils/AvPlayerUtil.ets b/commons/base/src/main/ets/utils/AvPlayerUtil.ets index 65f510c..47667c9 100644 --- a/commons/base/src/main/ets/utils/AvPlayerUtil.ets +++ b/commons/base/src/main/ets/utils/AvPlayerUtil.ets @@ -20,8 +20,6 @@ import { BusinessError } from '@kit.BasicServicesKit'; import Logger from './Logger'; import { CommonConstants } from '../constants/CommonConstants'; -const uiContext: common.UIAbilityContext | undefined = AppStorage.get('uiContext'); - export class AvPlayerUtil { private avPlayer?: media.AVPlayer; private url: resourceManager.RawFileDescriptor | null = null; @@ -35,67 +33,73 @@ export class AvPlayerUtil { } this.avPlayer.reset(); } - private onStateChange: (state: media.AVPlayerState) => void = async (state: media.AVPlayerState) => { - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - switch (state) { - case CommonConstants.AV_PLAYER_IDLE_STATE: - this.url = await uiContext!.resourceManager.getRawFd(CommonConstants.LIVE_VIDEO_NAME); - this.avPlayer.fdSrc = this.url; - Logger.info('AVPlayer state idle called.'); - break; - case CommonConstants.AV_PLAYER_INITIALIZED_STATE: - Logger.info('AVPlayer initialized called.'); - this.avPlayer.surfaceId = this.surfaceId; - this.avPlayer.prepare().then(() => { - Logger.info('AVPlayer prepare succeeded.'); - }, (err: BusinessError) => { - Logger.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`); - if (this.avPlayer === undefined) { - Logger.error(`AvPlayer is undefined`); - return; - } - this.avPlayer.reset(); - }); - break; - case CommonConstants.AV_PLAYER_PREPARED_STATE: - this.avPlayer.videoScaleType = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT; - Logger.info('AVPlayer state prepared called.'); - this.avPlayer.play(); - break; - case CommonConstants.AV_PLAYER_PLAYING_STATE: - Logger.info('AVPlayer state playing called.'); - this.playState = true; - break; - case CommonConstants.AV_PLAYER_PAUSED_STATE: - Logger.info('AVPlayer state paused called.'); - this.playState = false; - break; - case CommonConstants.AV_PLAYER_COMPLETED_STATE: - Logger.info('AVPlayer state completed called.'); - this.playState = false; - this.avPlayer.stop(); - break; - case CommonConstants.AV_PLAYER_STOPPED_STATE: - Logger.info('AVPlayer state stopped called.'); - break; - case CommonConstants.AV_PLAYER_RELEASE_STATE: - Logger.info('AVPlayer state released called.'); - break; - case CommonConstants.AV_PLAYER_ERROR_STATE: - Logger.error('AVPlayer state error called.'); - break; - default: - Logger.info('AVPlayer state unknown called.'); - break; + private onStateChange: (state: media.AVPlayerState) => void + private uiContext: UIContext | undefined = undefined; + + constructor(uiContext: UIContext) { + this.uiContext = uiContext; + this.onStateChange = async (state: media.AVPlayerState) => { + if (this.avPlayer === undefined) { + Logger.error(`AvPlayer is undefined`); + return; + } + switch (state) { + case CommonConstants.AV_PLAYER_IDLE_STATE: + this.url = await uiContext!.getHostContext()!.resourceManager.getRawFd(CommonConstants.LIVE_VIDEO_NAME); + this.avPlayer.fdSrc = this.url; + Logger.info('AVPlayer state idle called.'); + break; + case CommonConstants.AV_PLAYER_INITIALIZED_STATE: + Logger.info('AVPlayer initialized called.'); + this.avPlayer.surfaceId = this.surfaceId; + this.avPlayer.prepare().then(() => { + Logger.info('AVPlayer prepare succeeded.'); + }, (err: BusinessError) => { + Logger.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`); + if (this.avPlayer === undefined) { + Logger.error(`AvPlayer is undefined`); + return; + } + this.avPlayer.reset(); + }); + break; + case CommonConstants.AV_PLAYER_PREPARED_STATE: + this.avPlayer.videoScaleType = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT; + Logger.info('AVPlayer state prepared called.'); + this.avPlayer.play(); + break; + case CommonConstants.AV_PLAYER_PLAYING_STATE: + Logger.info('AVPlayer state playing called.'); + this.playState = true; + break; + case CommonConstants.AV_PLAYER_PAUSED_STATE: + Logger.info('AVPlayer state paused called.'); + this.playState = false; + break; + case CommonConstants.AV_PLAYER_COMPLETED_STATE: + Logger.info('AVPlayer state completed called.'); + this.playState = false; + this.avPlayer.stop(); + break; + case CommonConstants.AV_PLAYER_STOPPED_STATE: + Logger.info('AVPlayer state stopped called.'); + break; + case CommonConstants.AV_PLAYER_RELEASE_STATE: + Logger.info('AVPlayer state released called.'); + break; + case CommonConstants.AV_PLAYER_ERROR_STATE: + Logger.error('AVPlayer state error called.'); + break; + default: + Logger.info('AVPlayer state unknown called.'); + break; + } } } - static getAvPlayerUtil(): AvPlayerUtil | undefined { + static getAvPlayerUtil(uiContext: UIContext): AvPlayerUtil | undefined { if (!AppStorage.get(CommonConstants.AV_PLAYER_UTIL)) { - AppStorage.setOrCreate(CommonConstants.AV_PLAYER_UTIL, new AvPlayerUtil()); + AppStorage.setOrCreate(CommonConstants.AV_PLAYER_UTIL, new AvPlayerUtil(uiContext)); } return AppStorage.get(CommonConstants.AV_PLAYER_UTIL); } @@ -106,7 +110,7 @@ export class AvPlayerUtil { this.surfaceId = surfaceId; Logger.info('Created AvPlayer successfully.'); // Entering idle state. - this.url = await uiContext!.resourceManager.getRawFd(CommonConstants.LIVE_VIDEO_NAME); + this.url = await this.uiContext!.getHostContext()!.resourceManager.getRawFd(CommonConstants.LIVE_VIDEO_NAME); this.avPlayer.fdSrc = this.url; this.setAVPlayerCallback(); } else { diff --git a/commons/base/src/main/ets/utils/PipWindowUtil.ets b/commons/base/src/main/ets/utils/PipWindowUtil.ets index 90def49..624d832 100644 --- a/commons/base/src/main/ets/utils/PipWindowUtil.ets +++ b/commons/base/src/main/ets/utils/PipWindowUtil.ets @@ -23,11 +23,15 @@ export class PipWindowUtil { private isShowingPip: boolean = false; private pipController?: PiPWindow.PiPController = undefined; private mXComponentController: XComponentController = new XComponentController(); - private avPlayerUtil: AvPlayerUtil | undefined = AvPlayerUtil.getAvPlayerUtil(); + private avPlayerUtil: AvPlayerUtil | undefined = undefined; - static getPipWindowUtil(): PipWindowUtil | undefined { + constructor(uiContext: UIContext) { + this.avPlayerUtil = AvPlayerUtil.getAvPlayerUtil(uiContext); + } + + static getPipWindowUtil(uiContext: UIContext): PipWindowUtil | undefined { if (!AppStorage.get(CommonConstants.PIP_WINDOW_UTIL)) { - AppStorage.setOrCreate(CommonConstants.PIP_WINDOW_UTIL, new PipWindowUtil()); + AppStorage.setOrCreate(CommonConstants.PIP_WINDOW_UTIL, new PipWindowUtil(uiContext)); } return AppStorage.get(CommonConstants.PIP_WINDOW_UTIL); } diff --git a/features/detail/src/main/ets/view/Live.ets b/features/detail/src/main/ets/view/Live.ets index 0e88757..0edfc5e 100644 --- a/features/detail/src/main/ets/view/Live.ets +++ b/features/detail/src/main/ets/view/Live.ets @@ -30,9 +30,9 @@ export struct Live { @Builder liveCloseBuilder() {}; @BuilderParam shopCarButton: () => void = this.shopCarBuilder; @Consume('pageInfos') pageInfos: NavPathStack; - private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(); + private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(this.getUIContext()); private surfaceId: string = ''; - private avPlayerUtil: AvPlayerUtil | undefined = AvPlayerUtil.getAvPlayerUtil(); + private avPlayerUtil: AvPlayerUtil | undefined = AvPlayerUtil.getAvPlayerUtil(this.getUIContext()); aboutToDisappear(): void { if (this.avPlayerUtil === undefined) { diff --git a/features/detail/src/main/ets/view/LiverHeader.ets b/features/detail/src/main/ets/view/LiverHeader.ets index 2cc426f..e7f117c 100644 --- a/features/detail/src/main/ets/view/LiverHeader.ets +++ b/features/detail/src/main/ets/view/LiverHeader.ets @@ -23,7 +23,7 @@ export struct LiverHeader { @Consume('pageInfos') pageInfos: NavPathStack; @Builder liveCloseBuilder() {}; @BuilderParam liveCloseButton: () => void = this.liveCloseBuilder; - private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(); + private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(this.getUIContext()); build() { Row() { diff --git a/features/detail/src/main/ets/view/ProductDetail.ets b/features/detail/src/main/ets/view/ProductDetail.ets index 3134644..24a15c3 100644 --- a/features/detail/src/main/ets/view/ProductDetail.ets +++ b/features/detail/src/main/ets/view/ProductDetail.ets @@ -32,7 +32,7 @@ export struct ProductPicture { @Link isMoreLiveDetail: boolean; @Consume('pageInfos') pageInfos: NavPathStack; private context: Context = this.getUIContext().getHostContext()! - private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(); + private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(this.getUIContext()); private abilityName: string = (this.context as common.UIAbilityContext).abilityInfo.name; @Builder diff --git a/features/detail/src/main/ets/view/ProductHome.ets b/features/detail/src/main/ets/view/ProductHome.ets index c3eb26c..5ed16cf 100644 --- a/features/detail/src/main/ets/view/ProductHome.ets +++ b/features/detail/src/main/ets/view/ProductHome.ets @@ -35,7 +35,7 @@ export struct ProductHome { @State detailType: string = CommonConstants.BIND_SHEET_PAGE_TYPES[3]; @State isLiveMoreDetail: boolean = false; @Consume('pageInfos') pageInfos: NavPathStack; - private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(); + private pipWindowUtil: PipWindowUtil | undefined = PipWindowUtil.getPipWindowUtil(this.getUIContext()); aboutToDisappear(): void { if (deviceInfo.deviceType !== CommonConstants.DEVICE_TYPES[0]) { diff --git a/products/phone/src/main/ets/entryability/EntryAbility.ets b/products/phone/src/main/ets/entryability/EntryAbility.ets index 1d5aa7a..44f35ec 100644 --- a/products/phone/src/main/ets/entryability/EntryAbility.ets +++ b/products/phone/src/main/ets/entryability/EntryAbility.ets @@ -53,8 +53,6 @@ export default class EntryAbility extends UIAbility { this.windowObj.on('windowStatusChange', this.onWindowStatusChange); } }) - AppStorage.setOrCreate('uiContext', this.context); - console.log(JSON.stringify(this.context) + '555555555555') windowStage.loadContent('pages/Index', async (err, data) => { if (err.code) { diff --git a/products/phone/src/main/ets/secondability/SecondAbility.ets b/products/phone/src/main/ets/secondability/SecondAbility.ets index 73a6084..bc18cd1 100644 --- a/products/phone/src/main/ets/secondability/SecondAbility.ets +++ b/products/phone/src/main/ets/secondability/SecondAbility.ets @@ -73,7 +73,6 @@ export default class SecondAbility extends UIAbility { if (canIUse('SystemCapability.Window.SessionManager')) { display.on(`foldStatusChange`, this.onFoldStatusChange); } - AppStorage.setOrCreate('uiContext', this.context); windowStage.loadContent('pages/Index', async (err, data) => { if (err.code) { -- Gitee