Showing
3 changed files
with
143 additions
and
26 deletions
| @@ -64,3 +64,5 @@ export { FirstTabTopSearchComponent } from "./src/main/ets/components/search/Fir | @@ -64,3 +64,5 @@ export { FirstTabTopSearchComponent } from "./src/main/ets/components/search/Fir | ||
| 64 | export { ListHasNoMoreDataUI } from "./src/main/ets/components/reusable/ListHasNoMoreDataUI" | 64 | export { ListHasNoMoreDataUI } from "./src/main/ets/components/reusable/ListHasNoMoreDataUI" |
| 65 | 65 | ||
| 66 | export { LottieView } from './src/main/ets/lottie/LottieView' | 66 | export { LottieView } from './src/main/ets/lottie/LottieView' |
| 67 | + | ||
| 68 | +export { AudioSuspensionModel } from "./src/main/ets/viewmodel/AudioSuspensionModel" |
| 1 | -import { WDPlayerController } from 'wdPlayer'; | 1 | +import { WDPlayerController, PlayerConstants } from 'wdPlayer'; |
| 2 | import { PaperReaderSimpleDialog } from './PaperReaderDialog'; | 2 | import { PaperReaderSimpleDialog } from './PaperReaderDialog'; |
| 3 | import { Logger } from 'wdKit/Index'; | 3 | import { Logger } from 'wdKit/Index'; |
| 4 | +import { AudioSuspensionModel } from '../viewmodel/AudioSuspensionModel'; | ||
| 4 | 5 | ||
| 5 | const TAG = 'AudioDialog'; | 6 | const TAG = 'AudioDialog'; |
| 6 | 7 | ||
| 7 | @Preview | 8 | @Preview |
| 8 | @CustomDialog | 9 | @CustomDialog |
| 9 | export struct AudioDialog { | 10 | export struct AudioDialog { |
| 11 | + @Consume audioTitle: string; | ||
| 12 | + @Consume currentTime: string; | ||
| 13 | + @Consume totalTime: string; | ||
| 14 | + @Consume progressVal: number; | ||
| 15 | + @State currentStatus: number = 0; | ||
| 16 | + controllerDetail?: CustomDialogController | ||
| 17 | + | ||
| 10 | private playerController: WDPlayerController = new WDPlayerController(); | 18 | private playerController: WDPlayerController = new WDPlayerController(); |
| 11 | private simpleAudioDialog: CustomDialogController = new CustomDialogController({ | 19 | private simpleAudioDialog: CustomDialogController = new CustomDialogController({ |
| 12 | builder: PaperReaderSimpleDialog({ | 20 | builder: PaperReaderSimpleDialog({ |
| @@ -21,8 +29,12 @@ export struct AudioDialog { | @@ -21,8 +29,12 @@ export struct AudioDialog { | ||
| 21 | 29 | ||
| 22 | }) | 30 | }) |
| 23 | 31 | ||
| 32 | + private AudioSuspension = new AudioSuspensionModel(this.simpleAudioDialog) | ||
| 33 | + | ||
| 34 | + | ||
| 24 | onCancel() { | 35 | onCancel() { |
| 25 | Logger.info(TAG, "cj2024 onCancel = ") | 36 | Logger.info(TAG, "cj2024 onCancel = ") |
| 37 | + this.AudioSuspension.setPlayerUrl() | ||
| 26 | } | 38 | } |
| 27 | 39 | ||
| 28 | /** | 40 | /** |
| @@ -38,34 +50,92 @@ export struct AudioDialog { | @@ -38,34 +50,92 @@ export struct AudioDialog { | ||
| 38 | } | 50 | } |
| 39 | 51 | ||
| 40 | build() { | 52 | build() { |
| 41 | - Row() { | ||
| 42 | - Image($r("app.media.icon_audio_pause")) | ||
| 43 | - .objectFit(ImageFit.Contain) | ||
| 44 | - .margin(18) | ||
| 45 | - .width(24) | ||
| 46 | - .height(24) | ||
| 47 | - } | ||
| 48 | - .width(60) | ||
| 49 | - .height(60) | ||
| 50 | - .backgroundColor(Color.White) | ||
| 51 | - .onClick(() => { | ||
| 52 | - if (this.simpleAudioDialog) { | ||
| 53 | - this.simpleAudioDialog.close() | ||
| 54 | - this.simpleAudioDialog.open() | ||
| 55 | - if (this.simpleAudioDialog) { | ||
| 56 | - setTimeout(() => { | ||
| 57 | - console.log('PaperReaderSimpleDialog delay 1s'); | ||
| 58 | - if (this.simpleAudioDialog != undefined) { | ||
| 59 | - this.simpleAudioDialog.close() | ||
| 60 | - } | ||
| 61 | - if (this.simpleAudioDialog != undefined) { | ||
| 62 | - this.simpleAudioDialog.open() | ||
| 63 | - } | ||
| 64 | - }, 500000); | 53 | + Stack({ alignContent: Alignment.End }) { |
| 54 | + Column() { //标题 时间 进度条 | ||
| 55 | + Marquee({ | ||
| 56 | + start: true, | ||
| 57 | + step: 5, | ||
| 58 | + loop: Number.POSITIVE_INFINITY, | ||
| 59 | + fromStart: true, | ||
| 60 | + src: this.audioTitle | ||
| 61 | + }) | ||
| 62 | + .width("60%") | ||
| 63 | + .height(20) | ||
| 64 | + .fontColor($r("app.color.color_222222")) | ||
| 65 | + .fontSize(14) | ||
| 66 | + .margin({ top: 10, left: 10 }) | ||
| 67 | + .alignSelf(ItemAlign.Start) | ||
| 68 | + .onStart(() => { | ||
| 69 | + console.info('Marquee animation complete onStart') | ||
| 70 | + }) | ||
| 71 | + .onBounce(() => { | ||
| 72 | + console.info('Marquee animation complete onBounce') | ||
| 73 | + }) | ||
| 74 | + .onFinish(() => { | ||
| 75 | + console.info('Marquee animation complete onFinish') | ||
| 76 | + }) | ||
| 77 | + | ||
| 78 | + Row() { | ||
| 79 | + Text(this.currentTime) | ||
| 80 | + .fontSize($r('app.float.font_size_12')) | ||
| 81 | + .fontColor($r('app.color.color_999999')) | ||
| 82 | + .height("100%") | ||
| 83 | + .alignSelf(ItemAlign.Start) | ||
| 84 | + Text("/" + this.totalTime) | ||
| 85 | + .fontSize($r('app.float.font_size_12')) | ||
| 86 | + .fontColor($r('app.color.color_999999')) | ||
| 87 | + .height("100%") | ||
| 88 | + .alignSelf(ItemAlign.Start) | ||
| 89 | + | ||
| 65 | } | 90 | } |
| 91 | + .width("100%") | ||
| 92 | + .height(16) | ||
| 93 | + .margin({ top: 4, left: 10 }) | ||
| 94 | + | ||
| 95 | + Progress({ value: this.progressVal, total: 100, type: ProgressType.Capsule }) | ||
| 96 | + .color($r('app.color.color_ED2800')) | ||
| 97 | + .backgroundColor($r('app.color.white')) | ||
| 98 | + .width("100%") | ||
| 99 | + .height(3) | ||
| 100 | + .margin({ top: 7 }) | ||
| 66 | } | 101 | } |
| 102 | + .width("100%") | ||
| 103 | + .height("100%") | ||
| 104 | + .justifyContent(FlexAlign.Start) | ||
| 67 | 105 | ||
| 68 | - }) | 106 | + Row() { |
| 107 | + Image(this.currentStatus != PlayerConstants.STATUS_START ? $r("app.media.icon_audio_pause") : $r("app.media.icon_audio_playing")) | ||
| 108 | + .objectFit(ImageFit.Contain) | ||
| 109 | + .width(24) | ||
| 110 | + .height(24) | ||
| 111 | + .margin({ right: 12 }) | ||
| 112 | + .onClick(() => { | ||
| 113 | + if (this.playerController) { | ||
| 114 | + // this.onConfirm() | ||
| 115 | + this.playerController.switchPlayOrPause() | ||
| 116 | + this.currentStatus = this.playerController.getStatus() | ||
| 117 | + } | ||
| 118 | + }) | ||
| 69 | 119 | ||
| 120 | + Image($r("app.media.icon_audio_close")) | ||
| 121 | + .objectFit(ImageFit.Contain) | ||
| 122 | + .width(24) | ||
| 123 | + .height(24) | ||
| 124 | + .onClick(() => { | ||
| 125 | + if (this.playerController) { | ||
| 126 | + this.playerController.stop() | ||
| 127 | + } | ||
| 128 | + if (this.controllerDetail) { | ||
| 129 | + this.controllerDetail.close() | ||
| 130 | + } | ||
| 131 | + }) | ||
| 132 | + }.width(80) | ||
| 133 | + .height(60) | ||
| 134 | + | ||
| 135 | + } | ||
| 136 | + .width("65%") | ||
| 137 | + .height(60) | ||
| 138 | + .backgroundColor(Color.White) | ||
| 139 | + .borderRadius(2) | ||
| 70 | } | 140 | } |
| 71 | } | 141 | } |
| 1 | +import { Logger } from 'wdKit'; | ||
| 2 | +import { WDPlayerController } from 'wdPlayer'; | ||
| 3 | + | ||
| 4 | +const TAG = 'AudioSuspensionModel' | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 音频悬浮窗公共方法类 | ||
| 8 | + */ | ||
| 9 | +export class AudioSuspensionModel { | ||
| 10 | + public playerController: SubscribedAbstractProperty<WDPlayerController> = AppStorage.link<WDPlayerController>('playerController') | ||
| 11 | + public simpleAudioDialog: CustomDialogController = {} as CustomDialogController | ||
| 12 | + constructor(simpleAudioDialog: CustomDialogController) { | ||
| 13 | + this.simpleAudioDialog = simpleAudioDialog | ||
| 14 | + | ||
| 15 | + this.initPlayerController() | ||
| 16 | + } | ||
| 17 | + /** | ||
| 18 | + * 判断音频实例是否已存在,不存在则创建 | ||
| 19 | + */ | ||
| 20 | + private initPlayerController() { | ||
| 21 | + if(this.playerController === undefined) { | ||
| 22 | + Logger.info(TAG, 'playerController undefined') | ||
| 23 | + AppStorage.setOrCreate('playerController', new WDPlayerController()); | ||
| 24 | + this.playerController = AppStorage.link<WDPlayerController>('playerController') | ||
| 25 | + Logger.info(TAG, 'playerController create success') | ||
| 26 | + } else { | ||
| 27 | + Logger.info(TAG, 'playerController already exit') | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + /** | ||
| 31 | + * 配置音频地址 | ||
| 32 | + */ | ||
| 33 | + public setPlayerUrl() { | ||
| 34 | + // this.playerController.switchPlayOrPause() | ||
| 35 | + Logger.info(TAG, 'handlePlayer') | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public delete() { | ||
| 39 | + let res: boolean = AppStorage.delete('PropB'); | ||
| 40 | + Logger.info(TAG, `delete: ${res}`) | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + | ||
| 44 | + | ||
| 45 | +} |
-
Please register or login to post a comment