From 278263f10a90e186e06dc2d5b978acf7c7b18ff2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Tue, 16 Sep 2025 06:38:12 +0000
Subject: [PATCH 01/24] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20en?=
=?UTF-8?q?try/src/main/resources/base/media/ic=5Fvideo=5Fwindow=5Fscale.s?=
=?UTF-8?q?vg?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
entry/src/main/resources/base/media/ic_video_window_scale.svg | 2 --
1 file changed, 2 deletions(-)
delete mode 100644 entry/src/main/resources/base/media/ic_video_window_scale.svg
diff --git a/entry/src/main/resources/base/media/ic_video_window_scale.svg b/entry/src/main/resources/base/media/ic_video_window_scale.svg
deleted file mode 100644
index 67eef9e..0000000
--- a/entry/src/main/resources/base/media/ic_video_window_scale.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
--
Gitee
From 7621725a3fe05dc58458a374fdbce6754de5e19b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Tue, 16 Sep 2025 06:40:50 +0000
Subject: [PATCH 02/24] =?UTF-8?q?=E6=9B=BF=E6=8D=A2scale=E5=9B=BE=E6=A0=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: 马雪莹 <1799939623@qq.com>
---
.../base/media/ic_video_window_scale.svg | 26 +++++++++++++++++++
1 file changed, 26 insertions(+)
create mode 100644 entry/src/main/resources/base/media/ic_video_window_scale.svg
diff --git a/entry/src/main/resources/base/media/ic_video_window_scale.svg b/entry/src/main/resources/base/media/ic_video_window_scale.svg
new file mode 100644
index 0000000..0d57cd4
--- /dev/null
+++ b/entry/src/main/resources/base/media/ic_video_window_scale.svg
@@ -0,0 +1,26 @@
+
--
Gitee
From 1bd2615bd7ddacc0baadc0fa31b1d78ff11a58d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Tue, 16 Sep 2025 15:08:52 +0800
Subject: [PATCH 03/24] delete hilog.info
---
.../ets/controller/AvPlayerController.ets | 44 +++----------------
.../main/ets/entryability/EntryAbility.ets | 3 --
entry/src/main/ets/pages/Index.ets | 1 -
3 files changed, 5 insertions(+), 43 deletions(-)
diff --git a/entry/src/main/ets/controller/AvPlayerController.ets b/entry/src/main/ets/controller/AvPlayerController.ets
index 585bfbd..51c2ea2 100644
--- a/entry/src/main/ets/controller/AvPlayerController.ets
+++ b/entry/src/main/ets/controller/AvPlayerController.ets
@@ -64,21 +64,16 @@ export class AvPlayerController {
if (source.index) {
this.index = source.index;
}
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer == this.curSource : ${JSON.stringify(this.curSource)}`);
if (!this.curSource) {
return;
}
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer == initCamera surfaceId == ${surfaceId}`);
this.surfaceID = surfaceId;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer == this.surfaceID surfaceId == ${this.surfaceID}`);
try {
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'initPlayer videoPlay avPlayerDemo');
// Creates the avPlayer instance object.
this.avPlayer = avPlayer ? avPlayer : await media.createAVPlayer()
// Creates a callback function for state machine changes.
this.setAVPlayerCallback();
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'initPlayer videoPlay setAVPlayerCallback');
if (!this.context) {
hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer failed context not set`);
@@ -88,14 +83,10 @@ export class AvPlayerController {
case VideoDataType.RAW_FILE:
let fileDescriptor = await this.context.resourceManager.getRawFd(this.curSource.videoSrc);
this.avPlayer.fdSrc = fileDescriptor;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG,
- `initPlayer videoPlay src = ${JSON.stringify(this.avPlayer.fdSrc)}`);
break;
case VideoDataType.URL:
this.avPlayer.url = this.curSource.videoSrc;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG,
- `initPlayer videoPlay url = ${JSON.stringify(this.avPlayer.url)}`);
break;
case VideoDataType.RAW_M3U8_FILE:
@@ -105,13 +96,11 @@ export class AvPlayerController {
mediaSource.setMimeType(media.AVMimeTypes.APPLICATION_M3U8);
let playbackStrategy: media.PlaybackStrategy = { preferredBufferDuration: 20, showFirstFrameOnPrepare: true };
await this.avPlayer.setMediaSource(mediaSource, playbackStrategy);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer videoPlay fdUrl = ${JSON.stringify(fdUrl)}`);
break;
case VideoDataType.RAW_MP4_FILE:
let mp4Fd = await this.context.resourceManager.getRawFd(this.curSource.videoSrc);
let mp4FdUrl = 'fd://' + mp4Fd.fd;
this.avPlayer.url = mp4FdUrl;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `initPlayer videoPlay fdUrl = ${JSON.stringify(mp4FdUrl)}`);
break;
default:
break;
@@ -120,7 +109,6 @@ export class AvPlayerController {
if (this.curSource.caption) {
let fileDescriptorSub = await this.context.resourceManager.getRawFd(this.curSource.caption);
this.avPlayer.addSubtitleFromFd(fileDescriptorSub.fd, fileDescriptorSub.offset, fileDescriptorSub.length);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'initPlayer videoPlay addSubtitleFromFd');
}
// [End AddCaption]
} catch (err) {
@@ -141,19 +129,15 @@ export class AvPlayerController {
});
// Listening function for reporting time
this.avPlayer!.on('startRenderFrame', () => {
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `AVPlayer start render frame`);
AppStorage.setOrCreate('StartRender', true);
});
this.avPlayer!.on('durationUpdate', (time: number) => {
this.duration = time;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `AVPlayer duration update: ${time}`);
AppStorage.setOrCreate('DurationTime', time);
});
this.avPlayer.on('timeUpdate', (time: number) => {
this.currentTime = time;
AppStorage.setOrCreate('CurrentTime', time);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG,
- `setAVPlayerCallback timeUpdate success, and new time is = ${this.currentTime}`);
});
// The error callback function is triggered when an error occurs during avPlayer operations,
@@ -190,17 +174,13 @@ export class AvPlayerController {
hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state idle called.');
break;
case 'initialized': // This status is reported after the playback source is set on the AVPlayer.
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state initialized called.');
// Set the display screen. This parameter is not required when the resource to be played is audio-only.
this.avPlayer.surfaceId = this.surfaceID;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG,
- `setAVPlayerCallback this.avPlayer.surfaceId = ${this.avPlayer.surfaceId}`);
this.avPlayer.prepare();
break;
// [EndExclude state]
// DocsDot
case 'prepared': // This state machine is reported after the prepare interface is successfully invoked.
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state prepared called.');
this.isReady = true;
this.avPlayer.loop = true
// DocsDot
@@ -234,7 +214,6 @@ export class AvPlayerController {
// DocsDot
// [StartExclude other_state]
case 'playing': // After the play interface is successfully invoked, the state machine is reported.
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state playing called.');
this.isPlaying = true;
let eventDataTrue: emitter.EventData = {
data: {
@@ -248,7 +227,6 @@ export class AvPlayerController {
emitter.emit(innerEventTrue, eventDataTrue);
break;
case 'completed': // This state machine is triggered to report when the playback ends.
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state completed called.');
this.currentTime = 0;
let eventDataFalse: emitter.EventData = {
data: {
@@ -320,7 +298,6 @@ export class AvPlayerController {
try {
this.avPlayer.pause();
this.isPlaying = false;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'videoPause');
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoPause failed, code is ${err.code}, message is ${err.message}`);
@@ -334,7 +311,6 @@ export class AvPlayerController {
try {
this.avPlayer.stop();
this.isPlaying = false;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'videoPause');
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoPause failed, code is ${err.code}, message is ${err.message}`);
@@ -353,7 +329,6 @@ export class AvPlayerController {
try {
this.isMuted = isMuted;
await this.avPlayer!.setMediaMuted(media.MediaType.MEDIA_TYPE_AUD, isMuted)
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'videoMuted');
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoMuted failed, code is ${err.code}, message is ${err.message}`);
@@ -368,7 +343,6 @@ export class AvPlayerController {
if (this.avPlayer) {
try {
this.avPlayer.setSpeed(speed);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'videoSpeed');
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoSpeed failed, code is ${err.code}, message is ${err.message}`);
@@ -382,7 +356,6 @@ export class AvPlayerController {
if (this.avPlayer) {
try {
this.avPlayer.seek(seekTime, media.SeekMode.SEEK_CLOSEST);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `videoSeek== ${seekTime}`);
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoSeek failed, code is ${err.code}, message is ${err.message}`);
@@ -432,7 +405,6 @@ export class AvPlayerController {
if (this.avPlayer) {
try {
this.avPlayer.videoScaleType = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `videoScaleType_0`);
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoScaleType_0 failed, code is ${err.code}, message is ${err.message}`);
@@ -444,7 +416,6 @@ export class AvPlayerController {
if (this.avPlayer) {
try {
this.avPlayer.videoScaleType = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT_CROP
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, `videoScaleType_1`);
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
`videoScaleType_1 failed, code is ${err.code}, message is ${err.message}`);
@@ -454,27 +425,23 @@ export class AvPlayerController {
// [End window_scale_fun]
subtitleUpdateFunction(): void {
- try {
- if (this.avPlayer) {
+ if (this.avPlayer) {
+ try {
// [Start RegisterCaptionCallBack]
this.avPlayer.on('subtitleUpdate', (info: media.SubtitleInfo) => {
if (info) {
let text = (!info.text) ? '' : info.text;
- let startTime = (!info.startTime) ? 0 : info.startTime;
- let duration = (!info.duration) ? 0 : info.duration;
this.currentCaption = text; //update current caption content
- hilog.info(CommonConstants.LOG_DOMAIN, TAG,
- `subtitleUpdate info: text:${text}, startTime:${startTime}, duration:${duration}`);
} else {
this.currentCaption = '';
hilog.error(CommonConstants.LOG_DOMAIN, TAG, 'subtitleUpdate info is null');
}
});
// [End RegisterCaptionCallBack]
+ } catch (err) {
+ hilog.error(CommonConstants.LOG_DOMAIN, TAG,
+ `subtitleUpdateFunction failed, code is ${err.code}, message is ${err.message}`);
}
- } catch (err) {
- hilog.error(CommonConstants.LOG_DOMAIN, TAG,
- `subtitleUpdateFunction failed, code is ${err.code}, message is ${err.message}`);
}
}
@@ -487,7 +454,6 @@ export class AvPlayerController {
this.curSource.seekTime = this.avPlayer.currentTime;
await this.avPlayer.reset();
this.initAVPlayer(this.curSource, this.surfaceID, this.avPlayer);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'language change');
}
} catch (err) {
hilog.error(CommonConstants.LOG_DOMAIN, TAG,
diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets
index 9d939ae..bbfbfc5 100644
--- a/entry/src/main/ets/entryability/EntryAbility.ets
+++ b/entry/src/main/ets/entryability/EntryAbility.ets
@@ -30,10 +30,8 @@ export default class EntryAbility extends UIAbility {
if (want.parameters) {
if (want.parameters.currentTime) {
GlobalContext.getContext().setObject('currentTime', want.parameters.currentTime);
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'time: ' + want.parameters.currentTime);
}
}
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, '%{public}s', 'Ability onCreate');
}
onDestroy() {
@@ -41,7 +39,6 @@ export default class EntryAbility extends UIAbility {
}
onWindowStageCreate(windowStage: window.WindowStage): void {
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, '%{public}s', 'Ability onWindowStageCreate');
try {
windowStage.getMainWindow().then((win: window.Window) => {
win.setWindowKeepScreenOn(true);
diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets
index eb58111..2adf467 100644
--- a/entry/src/main/ets/pages/Index.ets
+++ b/entry/src/main/ets/pages/Index.ets
@@ -256,7 +256,6 @@ struct Index {
curVolume = curVolume >= 15.0 ? 15.0 : curVolume;
curVolume = curVolume <= 0.0 ? 0.0 : curVolume;
this.volume = curVolume;
- hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'AVPlayManage', 'AVPlayer', `this volumn is: ` + this.volume);
})
.onActionEnd(() => {
this.setVolumeTimer();
--
Gitee
From 8d1f5eee6a9507d0f55d71d5d6c6b6cbc39979af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Wed, 17 Sep 2025 14:38:14 +0800
Subject: [PATCH 04/24] =?UTF-8?q?=E6=94=B9=E5=BC=B9=E7=AA=97=E6=A0=B7?=
=?UTF-8?q?=E5=BC=8F&=E6=B7=BB=E5=8A=A0=E6=B2=89=E6=B5=B8=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
entry/src/main/ets/entryability/EntryAbility.ets | 7 ++-----
entry/src/main/ets/views/LanguageDialog.ets | 13 ++++++-------
entry/src/main/ets/views/ScaleDialog.ets | 10 +++++-----
entry/src/main/ets/views/SpeedDialog.ets | 6 +++---
entry/src/main/resources/base/element/color.json | 16 ++++++++++++++++
.../resources/base/media/ic_radio_selected.svg | 2 +-
6 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets
index bbfbfc5..e4af32f 100644
--- a/entry/src/main/ets/entryability/EntryAbility.ets
+++ b/entry/src/main/ets/entryability/EntryAbility.ets
@@ -42,11 +42,6 @@ export default class EntryAbility extends UIAbility {
try {
windowStage.getMainWindow().then((win: window.Window) => {
win.setWindowKeepScreenOn(true);
- win.setWindowSystemBarProperties({
- statusBarColor: '#000000',
- statusBarContentColor: '#FFFFFF'
- });
- win.setWindowLayoutFullScreen(true);
win.on('windowSizeChange', (newSize: window.Size) => {
let eventWHData: emitter.EventData = {
data: {
@@ -69,6 +64,8 @@ export default class EntryAbility extends UIAbility {
}
hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'Succeeded in loading the content. Data: %{public}s',
JSON.stringify(data) ?? '');
+ let windowClass: window.Window = windowStage.getMainWindowSync();
+ windowClass.setWindowLayoutFullScreen(true);
});
}
diff --git a/entry/src/main/ets/views/LanguageDialog.ets b/entry/src/main/ets/views/LanguageDialog.ets
index 9fe6e4a..5964216 100644
--- a/entry/src/main/ets/views/LanguageDialog.ets
+++ b/entry/src/main/ets/views/LanguageDialog.ets
@@ -39,7 +39,7 @@ export struct LanguageDialog {
.fontSize($r('app.float.size_20'))
.fontWeight(FontWeight.Bold)
.width('90%')
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_title_color'))
.textAlign(TextAlign.Center)
.margin({ top: $r('app.float.size_20'), bottom: $r('app.float.size_12') })
@@ -53,7 +53,7 @@ export struct LanguageDialog {
// DocsDot
// [StartExclude text_style2]
.fontSize($r('app.float.size_16'))
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
// [EndExclude text_style2]
@@ -98,15 +98,15 @@ export struct LanguageDialog {
// [End video_language_dialog]
.width('100%')
- .height('192vp')
.margin({
- top: $r('app.float.size_12')
+ top: $r('app.float.size_12'),
+ bottom: $r('app.float.size_15')
})
Row() {
Text($r('app.string.dialog_cancel'))
.fontSize($r('app.float.size_16'))
- .fontColor('#0A59F7')
+ .fontColor($r('app.color.dialog_cancel_color'))
.fontWeight(FontWeight.Medium)
.layoutWeight(1)
.textAlign(TextAlign.Center)
@@ -124,7 +124,6 @@ export struct LanguageDialog {
.width('100%')
.margin({ left: $r('app.float.size_16'), right: $r('app.float.size_16') })
.borderRadius($r('app.float.size_24'))
- .backgroundColor(Color.White)
-
+ .backgroundColor($r('app.color.dialog_background_color'))
}
}
\ No newline at end of file
diff --git a/entry/src/main/ets/views/ScaleDialog.ets b/entry/src/main/ets/views/ScaleDialog.ets
index 91ff6a7..36be7d2 100644
--- a/entry/src/main/ets/views/ScaleDialog.ets
+++ b/entry/src/main/ets/views/ScaleDialog.ets
@@ -40,7 +40,7 @@ export struct ScaleDialog {
.fontSize($r('app.float.size_20'))
.fontWeight(FontWeight.Bold)
.width('90%')
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_title_color'))
.textAlign(TextAlign.Center)
.margin({ top: $r('app.float.size_20'), bottom: $r('app.float.size_12') })
// [Start window_scale_dialog]
@@ -53,7 +53,7 @@ export struct ScaleDialog {
// DocsDot
// [StartExclude text_style2]
.fontSize($r('app.float.size_16'))
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
// [EndExclude text_style2]
@@ -105,9 +105,9 @@ export struct ScaleDialog {
}
// [End window_scale_dialog]
.width('100%')
- .height('192vp')
.margin({
- top: $r('app.float.size_12')
+ top: $r('app.float.size_12'),
+ bottom: $r('app.float.size_15')
})
Row() {
@@ -130,7 +130,7 @@ export struct ScaleDialog {
.width('100%')
.margin({ left: $r('app.float.size_16'), right: $r('app.float.size_16') })
.borderRadius($r('app.float.size_24'))
- .backgroundColor(Color.White)
+ .backgroundColor($r('app.color.dialog_background_color'))
}
}
\ No newline at end of file
diff --git a/entry/src/main/ets/views/SpeedDialog.ets b/entry/src/main/ets/views/SpeedDialog.ets
index a97c3d5..1e96376 100644
--- a/entry/src/main/ets/views/SpeedDialog.ets
+++ b/entry/src/main/ets/views/SpeedDialog.ets
@@ -44,7 +44,7 @@ export struct SpeedDialog {
.fontSize($r('app.float.size_20'))
.fontWeight(FontWeight.Bold)
.width('90%')
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_title_color'))
.textAlign(TextAlign.Center)
.margin({ top: $r('app.float.size_20'), bottom: $r('app.float.size_12') })
@@ -58,7 +58,7 @@ export struct SpeedDialog {
// DocsDot
// [StartExclude text_style2]
.fontSize($r('app.float.size_16'))
- .fontColor(Color.Black)
+ .fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
// [EndExclude text_style2]
@@ -142,7 +142,7 @@ export struct SpeedDialog {
.width('100%')
.margin({ left: $r('app.float.size_16'), right: $r('app.float.size_16') })
.borderRadius($r('app.float.size_24'))
- .backgroundColor(Color.White)
+ .backgroundColor($r('app.color.dialog_background_color'))
}
}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json
index 07787b2..65459b7 100644
--- a/entry/src/main/resources/base/element/color.json
+++ b/entry/src/main/resources/base/element/color.json
@@ -27,6 +27,22 @@
{
"name": "scale_font_color",
"value": "#0A59F7"
+ },
+ {
+ "name": "dialog_title_color",
+ "value": "#e5ffffff"
+ },
+ {
+ "name": "dialog_text_color",
+ "value": "#99ffffff"
+ },
+ {
+ "name": "dialog_cancel_color",
+ "value": "#ff317af7"
+ },
+ {
+ "name": "dialog_background_color",
+ "value": "#ff202224"
}
]
}
\ No newline at end of file
diff --git a/entry/src/main/resources/base/media/ic_radio_selected.svg b/entry/src/main/resources/base/media/ic_radio_selected.svg
index f115d62..36314af 100644
--- a/entry/src/main/resources/base/media/ic_radio_selected.svg
+++ b/entry/src/main/resources/base/media/ic_radio_selected.svg
@@ -5,7 +5,7 @@
-
+
--
Gitee
From 7574e83fd04a37108b5b9885947163be792c0cf9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Wed, 17 Sep 2025 16:40:10 +0800
Subject: [PATCH 05/24] =?UTF-8?q?optimize=E6=B2=89=E6=B5=B8=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
entry/src/main/ets/entryability/EntryAbility.ets | 1 +
entry/src/main/ets/pages/Index.ets | 2 +-
entry/src/main/ets/views/VideoOperate.ets | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets
index e4af32f..fceda61 100644
--- a/entry/src/main/ets/entryability/EntryAbility.ets
+++ b/entry/src/main/ets/entryability/EntryAbility.ets
@@ -66,6 +66,7 @@ export default class EntryAbility extends UIAbility {
JSON.stringify(data) ?? '');
let windowClass: window.Window = windowStage.getMainWindowSync();
windowClass.setWindowLayoutFullScreen(true);
+ windowClass.setWindowSystemBarEnable([])
});
}
diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets
index 2adf467..59f76f5 100644
--- a/entry/src/main/ets/pages/Index.ets
+++ b/entry/src/main/ets/pages/Index.ets
@@ -343,6 +343,6 @@ struct Index {
.backgroundColor(Color.Black)
.height('100%')
.width('100%')
- .padding({ top: '36vp', bottom: '28vp' })
+ .padding({ top: '36vp' })
}
}
\ No newline at end of file
diff --git a/entry/src/main/ets/views/VideoOperate.ets b/entry/src/main/ets/views/VideoOperate.ets
index 715b821..25b3e4d 100644
--- a/entry/src/main/ets/views/VideoOperate.ets
+++ b/entry/src/main/ets/views/VideoOperate.ets
@@ -206,7 +206,7 @@ export struct VideoOperate {
}
}
.justifyContent(FlexAlign.Center)
- .padding({ left: $r('app.float.size_12'), right: $r('app.float.size_20') })
+ .padding({ left: $r('app.float.size_12'), right: $r('app.float.size_20'), bottom: '28vp' })
.width('100%')
}
}
--
Gitee
From 0f50ecb7afcdcba3e4166c5ab4c3505927b028af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Thu, 18 Sep 2025 20:17:02 +0800
Subject: [PATCH 06/24] update
---
.../main/ets/entryability/EntryAbility.ets | 1 -
entry/src/main/ets/pages/Index.ets | 36 +++++++++++--------
entry/src/main/ets/views/LanguageDialog.ets | 3 +-
entry/src/main/ets/views/ScaleDialog.ets | 6 ++--
entry/src/main/ets/views/SetVolume.ets | 2 +-
entry/src/main/ets/views/SpeedDialog.ets | 8 +++--
entry/src/main/ets/views/VideoOperate.ets | 16 ++++-----
.../main/resources/base/element/color.json | 4 +--
.../main/resources/base/element/float.json | 12 ++++---
9 files changed, 51 insertions(+), 37 deletions(-)
diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets
index fceda61..e4af32f 100644
--- a/entry/src/main/ets/entryability/EntryAbility.ets
+++ b/entry/src/main/ets/entryability/EntryAbility.ets
@@ -66,7 +66,6 @@ export default class EntryAbility extends UIAbility {
JSON.stringify(data) ?? '');
let windowClass: window.Window = windowStage.getMainWindowSync();
windowClass.setWindowLayoutFullScreen(true);
- windowClass.setWindowSystemBarEnable([])
});
}
diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets
index 59f76f5..a010e48 100644
--- a/entry/src/main/ets/pages/Index.ets
+++ b/entry/src/main/ets/pages/Index.ets
@@ -60,9 +60,11 @@ struct Index {
@State windowWidth: number = 300;
@State windowHeight: number = 300;
@State isCalcWHFinished: boolean = false;
- @StorageLink('videoName') videoName: Resource = $r('app.string.video_res_1');
- @StorageLink('videoIndex') videoIndex: number = 0;
- @StorageLink('videoScaleType') videoScaleType: number = 0;
+ @Provide videoScaleType: number = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT;
+ @Provide speedName: Resource = $r('app.string.video_speed_1_0X');
+ @Provide speedIndex: number = 0;
+ @Provide isMuted: boolean = false;
+ @Provide currentLanguageType: number = 0;
private surfaceId: string = '';
private timeout: number = 0; // Timer ID
private volumeTimeout: number = 0; // VolumeTimer ID
@@ -167,12 +169,12 @@ struct Index {
}
onSpeedSelectUpdate() {
- AppStorage.setOrCreate('speedName', this.speedList[this.speedSelect]);
- AppStorage.setOrCreate('speedIndex', this.speedSelect);
+ this.speedName = this.speedList[this.speedSelect]
+ this.speedIndex = this.speedSelect
}
onVolumeUpdate() {
- AppStorage.setOrCreate('isMuted', this.volume <= 0.0);
+ this.isMuted = this.volume <= 0.0
this.avPlayerController.videoMuted(this.volume <= 0.0);
}
@@ -238,7 +240,7 @@ struct Index {
.fontFamily('Sans')
}
.width('100%')
- .position({ x: $r('app.float.size_zero'), y: $r('app.float.size_210') })
+ .position({ x: $r('app.float.size_zero'), y: $r('app.float.size_216') })
.zIndex(1)
// [End currentCaptionText]
@@ -267,13 +269,13 @@ struct Index {
.id('Video')
.justifyContent(FlexAlign.Center)
- Text()
- .height(`${this.surfaceH}px`)
- .width(`${this.surfaceW}px`)
- .margin({ top: $r('app.float.size_80') })
- .backgroundColor(Color.Black)
- .opacity($r('app.float.size_zero_five'))
- .visibility(this.isSwiping ? Visibility.Visible : Visibility.Hidden)
+ // Text()
+ // .height(`${this.surfaceH}px`)
+ // .width(`${this.surfaceW}px`)
+ // .margin({ top: $r('app.float.size_80') })
+ // .backgroundColor(Color.Black)
+ // .opacity($r('app.float.size_zero_five'))
+ // .visibility(this.isSwiping ? Visibility.Visible : Visibility.Hidden)
Row() {
Text(timeConvert(this.currentTime))
@@ -285,7 +287,13 @@ struct Index {
.opacity($r('app.float.size_1'))
.fontColor(Color.White)
}
+ .height($r('app.float.size_50'))
+ .backgroundColor('#90000000')
+ .borderRadius(10)
+ .alignItems(VerticalAlign.Center)
+ .justifyContent(FlexAlign.Center)
.margin({ top: $r('app.float.size_80') })
+ .padding({ left: $r('app.float.size_15'), right: $r('app.float.size_15') })
.visibility(this.isSwiping ? Visibility.Visible : Visibility.Hidden)
Column() {
diff --git a/entry/src/main/ets/views/LanguageDialog.ets b/entry/src/main/ets/views/LanguageDialog.ets
index 5964216..830aacc 100644
--- a/entry/src/main/ets/views/LanguageDialog.ets
+++ b/entry/src/main/ets/views/LanguageDialog.ets
@@ -26,11 +26,12 @@ export struct LanguageDialog {
@State languageList: Resource[] =
[$r('app.string.Chinese'), $r('app.string.English')];
@Link @Watch('onLanguageSelectUpdate') languageSelect: number; // Index of the current selection
+ @Consume currentLanguageType: number;
@StorageLink('avPlayerController') avPlayerController: AvPlayerController = new AvPlayerController();
private controller: CustomDialogController;
onLanguageSelectUpdate() {
- AppStorage.setOrCreate('currentLanguageType', this.languageSelect);
+ this.currentLanguageType = this.languageSelect;
}
build() {
diff --git a/entry/src/main/ets/views/ScaleDialog.ets b/entry/src/main/ets/views/ScaleDialog.ets
index 36be7d2..2827910 100644
--- a/entry/src/main/ets/views/ScaleDialog.ets
+++ b/entry/src/main/ets/views/ScaleDialog.ets
@@ -29,9 +29,9 @@ export struct ScaleDialog {
@Link @Watch('onWindowScaleSelectUpdate') windowScaleSelect: number; // Index of the current selection
@StorageLink('avPlayerController') avPlayerController: AvPlayerController = new AvPlayerController();
private controller: CustomDialogController;
-
+ @Consume videoScaleType: number;
onWindowScaleSelectUpdate() {
- AppStorage.setOrCreate('videoScaleType', this.windowScaleSelect);
+ this.videoScaleType = this.windowScaleSelect
}
build() {
@@ -113,7 +113,7 @@ export struct ScaleDialog {
Row() {
Text($r('app.string.dialog_cancel'))
.fontSize($r('app.float.size_16'))
- .fontColor($r('app.color.scale_font_color'))
+ .fontColor($r('app.color.dialog_cancel_color'))
.fontWeight(FontWeight.Medium)
.layoutWeight(1)
.textAlign(TextAlign.Center)
diff --git a/entry/src/main/ets/views/SetVolume.ets b/entry/src/main/ets/views/SetVolume.ets
index 3d779ab..2f8d22d 100644
--- a/entry/src/main/ets/views/SetVolume.ets
+++ b/entry/src/main/ets/views/SetVolume.ets
@@ -28,7 +28,7 @@ export struct SetVolume {
volumeParameter: {
position: {
x: 50,
- y: 900
+ y: 1000
}
}
})
diff --git a/entry/src/main/ets/views/SpeedDialog.ets b/entry/src/main/ets/views/SpeedDialog.ets
index 1e96376..4615b17 100644
--- a/entry/src/main/ets/views/SpeedDialog.ets
+++ b/entry/src/main/ets/views/SpeedDialog.ets
@@ -30,12 +30,14 @@ export struct SpeedDialog {
[$r('app.string.video_speed_1_0X'), $r('app.string.video_speed_1_25X'), $r('app.string.video_speed_1_75X'),
$r('app.string.video_speed_2_0X')];
@Link @Watch('onSpeedSelectUpdate') speedSelect: number; // Index of the current selection
+ @Consume speedName: Resource;
+ @Consume speedIndex: number;
@StorageLink('avPlayerController') avPlayerController: AvPlayerController = new AvPlayerController();
private controller: CustomDialogController;
onSpeedSelectUpdate() {
- AppStorage.setOrCreate('speedName', this.speedList[this.speedSelect]);
- AppStorage.setOrCreate('speedIndex', this.speedSelect);
+ this.speedName = this.speedList[this.speedSelect]
+ this.speedIndex = this.speedSelect
}
build() {
@@ -125,7 +127,7 @@ export struct SpeedDialog {
Row() {
Text($r('app.string.dialog_cancel'))
.fontSize($r('app.float.size_16'))
- .fontColor('#0A59F7')
+ .fontColor($r('app.color.dialog_cancel_color'))
.fontWeight(FontWeight.Medium)
.layoutWeight(1)
.textAlign(TextAlign.Center)
diff --git a/entry/src/main/ets/views/VideoOperate.ets b/entry/src/main/ets/views/VideoOperate.ets
index 25b3e4d..bfb0acc 100644
--- a/entry/src/main/ets/views/VideoOperate.ets
+++ b/entry/src/main/ets/views/VideoOperate.ets
@@ -31,26 +31,26 @@ export struct VideoOperate {
@Link avPlayerController: AvPlayerController
@Link flag: boolean; // Play/Pause
@Link XComponentFlag: boolean;
- @StorageLink('speedIndex') speedIndex: number = 0; // Index of the playback rate list.
+ @Consume speedIndex: number; // Index of the playback rate list.
+ @Consume speedName: Resource;
+ @Consume videoScaleType: number;
+ @Consume isMuted: boolean;
@StorageLink('sliderWidth') sliderWidth: string = '';
- @StorageLink('speedName') speedName: Resource = $r('app.string.video_speed_1_0X');
- @StorageLink('isMuted') isMuted: boolean = false;
- @StorageLink('videoScaleType') videoScaleType: number = media.VideoScaleType.VIDEO_SCALE_TYPE_FIT;
- @StorageLink('currentLanguageType') currentLanguageType: number = 0;
+ @Consume currentLanguageType: number;
private dialogController: CustomDialogController = new CustomDialogController({
builder: SpeedDialog({ speedSelect: $speedSelect }),
alignment: DialogAlignment.Center,
- offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_20') }
+ offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_4') }
});
private scaleDialogController: CustomDialogController = new CustomDialogController({
builder: ScaleDialog({ windowScaleSelect: $windowScaleSelect }),
alignment: DialogAlignment.Center,
- offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_20') }
+ offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_4') }
});
private languageDialogController: CustomDialogController = new CustomDialogController({
builder: LanguageDialog({ languageSelect: $languageSelect }),
alignment: DialogAlignment.Center,
- offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_20') }
+ offset: { dx: $r('app.float.size_zero'), dy: $r('app.float.size_down_4') }
});
build() {
diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json
index 65459b7..acb7873 100644
--- a/entry/src/main/resources/base/element/color.json
+++ b/entry/src/main/resources/base/element/color.json
@@ -6,7 +6,7 @@
},
{
"name": "slider_selected",
- "value": "#007DFF"
+ "value": "#317af7"
},
{
"name": "speed_dialog",
@@ -38,7 +38,7 @@
},
{
"name": "dialog_cancel_color",
- "value": "#ff317af7"
+ "value": "#317af7"
},
{
"name": "dialog_background_color",
diff --git a/entry/src/main/resources/base/element/float.json b/entry/src/main/resources/base/element/float.json
index 5006bd8..c7d9b44 100644
--- a/entry/src/main/resources/base/element/float.json
+++ b/entry/src/main/resources/base/element/float.json
@@ -49,8 +49,8 @@
"value": "20"
},
{
- "name": "size_down_20",
- "value": "-20"
+ "name": "size_down_4",
+ "value": "-4"
},
{
"name": "size_down_80",
@@ -105,8 +105,12 @@
"value": "-80"
},
{
- "name": "size_210",
- "value": "210"
+ "name": "size_120",
+ "value": "120"
+ },
+ {
+ "name": "size_216",
+ "value": "216"
},
{
"name": "size_254",
--
Gitee
From 96c66883943be5f2400650945dafb831d9cf970e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Fri, 19 Sep 2025 10:23:18 +0800
Subject: [PATCH 07/24] update
---
.../ets/controller/AvPlayerController.ets | 21 ++++++-------------
entry/src/main/ets/views/LanguageDialog.ets | 18 ++++++----------
entry/src/main/ets/views/ScaleDialog.ets | 18 ++++++----------
entry/src/main/ets/views/SpeedDialog.ets | 18 ++++++----------
4 files changed, 24 insertions(+), 51 deletions(-)
diff --git a/entry/src/main/ets/controller/AvPlayerController.ets b/entry/src/main/ets/controller/AvPlayerController.ets
index 51c2ea2..6f65d4d 100644
--- a/entry/src/main/ets/controller/AvPlayerController.ets
+++ b/entry/src/main/ets/controller/AvPlayerController.ets
@@ -159,17 +159,13 @@ export class AvPlayerController {
return;
}
// [Start loop_playback]
- /**
- * Loop playback
- */
// Callback function for state machine changes
this.avPlayer.on('stateChange', async (state) => {
if (!this.avPlayer) {
return;
}
switch (state) {
- // DocsDot
- // [StartExclude state]
+ // [StartExclude loop_playback]
case 'idle': // This state machine is triggered after the reset interface is successfully invoked.
hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state idle called.');
break;
@@ -178,13 +174,11 @@ export class AvPlayerController {
this.avPlayer.surfaceId = this.surfaceID;
this.avPlayer.prepare();
break;
- // [EndExclude state]
- // DocsDot
+ // [EndExclude loop_playback]
case 'prepared': // This state machine is reported after the prepare interface is successfully invoked.
this.isReady = true;
this.avPlayer.loop = true
- // DocsDot
- // [StartExclude prepared]
+ // [StartExclude loop_playback]
this.durationTime = this.avPlayer.duration;
this.currentTime = this.avPlayer.currentTime;
this.avPlayer.audioInterruptMode = audio.InterruptMode.SHARE_MODE;
@@ -208,11 +202,9 @@ export class AvPlayerController {
}
this.setVideoSpeed();
- // [EndExclude prepared]
- // DocsDot
+ // [EndExclude loop_playback]
break;
- // DocsDot
- // [StartExclude other_state]
+ // [StartExclude loop_playback]
case 'playing': // After the play interface is successfully invoked, the state machine is reported.
this.isPlaying = true;
let eventDataTrue: emitter.EventData = {
@@ -242,8 +234,7 @@ export class AvPlayerController {
default:
hilog.info(CommonConstants.LOG_DOMAIN, TAG, 'setAVPlayerCallback AVPlayer state unknown called.');
break;
- // [EndExclude other_state]
- // DocsDot
+ // [EndExclude loop_playback]
}
});
// [End loop_playback]
diff --git a/entry/src/main/ets/views/LanguageDialog.ets b/entry/src/main/ets/views/LanguageDialog.ets
index 830aacc..9112fb5 100644
--- a/entry/src/main/ets/views/LanguageDialog.ets
+++ b/entry/src/main/ets/views/LanguageDialog.ets
@@ -51,27 +51,22 @@ export struct LanguageDialog {
Column() {
Row() {
Text(item)
- // DocsDot
- // [StartExclude text_style2]
+ // [StartExclude video_language_dialog]
.fontSize($r('app.float.size_16'))
.fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
- // [EndExclude text_style2]
- // DocsDot
+ // [EndExclude video_language_dialog]
Blank()
Image(this.languageSelect === index ? $r('app.media.ic_radio_selected') :
$r('app.media.ic_radio'))
- // DocsDot
- // [StartExclude text_style3]
+ // [StartExclude video_language_dialog]
.width($r('app.float.size_24'))
.height($r('app.float.size_24'))
.objectFit(ImageFit.Contain)
- // [EndExclude text_style3]
- // DocsDot
+ // [EndExclude video_language_dialog]
}
- // DocsDot
- // [StartExclude text_style4]
+ // [StartExclude video_language_dialog]
.width('100%')
if (index != this.languageList.length - ONE) {
@@ -82,8 +77,7 @@ export struct LanguageDialog {
.color($r('app.color.speed_dialog'))
.width('100%')
}
- // [EndExclude text_style4]
- // DocsDot
+ // [EndExclude video_language_dialog]
}
.width('90%')
}
diff --git a/entry/src/main/ets/views/ScaleDialog.ets b/entry/src/main/ets/views/ScaleDialog.ets
index 2827910..8d146bc 100644
--- a/entry/src/main/ets/views/ScaleDialog.ets
+++ b/entry/src/main/ets/views/ScaleDialog.ets
@@ -50,27 +50,22 @@ export struct ScaleDialog {
Column() {
Row() {
Text(item)
- // DocsDot
- // [StartExclude text_style2]
+ // [StartExclude window_scale_dialog]
.fontSize($r('app.float.size_16'))
.fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
- // [EndExclude text_style2]
- // DocsDot
+ // [EndExclude window_scale_dialog]
Blank()
Image(this.windowScaleSelect === index ? $r('app.media.ic_radio_selected') :
$r('app.media.ic_radio'))
- // DocsDot
- // [StartExclude text_style3]
+ // [StartExclude window_scale_dialog]
.width($r('app.float.size_24'))
.height($r('app.float.size_24'))
.objectFit(ImageFit.Contain)
- // [EndExclude text_style3]
- // DocsDot
+ // [EndExclude window_scale_dialog]
}
- // DocsDot
- // [StartExclude text_style4]
+ // [StartExclude window_scale_dialog]
.width('100%')
if (index != this.scaleList.length - ONE) {
Divider()
@@ -80,8 +75,7 @@ export struct ScaleDialog {
.color($r('app.color.speed_dialog'))
.width('100%')
}
- // [EndExclude text_style4]
- // DocsDot
+ // [EndExclude window_scale_dialog]
}
.width('90%')
}
diff --git a/entry/src/main/ets/views/SpeedDialog.ets b/entry/src/main/ets/views/SpeedDialog.ets
index 4615b17..3bbb38c 100644
--- a/entry/src/main/ets/views/SpeedDialog.ets
+++ b/entry/src/main/ets/views/SpeedDialog.ets
@@ -57,27 +57,22 @@ export struct SpeedDialog {
Column() {
Row() {
Text(item)
- // DocsDot
- // [StartExclude text_style2]
+ // [StartExclude video_speed_dialog]
.fontSize($r('app.float.size_16'))
.fontColor($r('app.color.dialog_text_color'))
.fontWeight(FontWeight.Medium)
.textAlign(TextAlign.Center)
- // [EndExclude text_style2]
- // DocsDot
+ // [EndExclude video_speed_dialog]
Blank()
Image(this.speedSelect === index ? $r('app.media.ic_radio_selected') :
$r('app.media.ic_radio'))
- // DocsDot
- // [StartExclude text_style3]
+ // [StartExclude video_speed_dialog]
.width($r('app.float.size_24'))
.height($r('app.float.size_24'))
.objectFit(ImageFit.Contain)
- // [EndExclude text_style3]
- // DocsDot
+ // [EndExclude video_speed_dialog]
}
- // DocsDot
- // [StartExclude text_style4]
+ // [StartExclude video_speed_dialog]
.width('100%')
if (index != this.speedList.length - ONE) {
@@ -88,8 +83,7 @@ export struct SpeedDialog {
.color($r('app.color.speed_dialog'))
.width('100%')
}
- // [EndExclude text_style4]
- // DocsDot
+ // [EndExclude video_speed_dialog]
}
.width('90%')
}
--
Gitee
From e63046dc89198e8d038713ab94b51ed098077aeb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E9=9B=AA=E8=8E=B9?= <1799939623@qq.com>
Date: Fri, 19 Sep 2025 09:11:27 +0000
Subject: [PATCH 08/24] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20sc?=
=?UTF-8?q?reenshots/devices/pause.png?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
screenshots/devices/pause.png | Bin 347049 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 screenshots/devices/pause.png
diff --git a/screenshots/devices/pause.png b/screenshots/devices/pause.png
deleted file mode 100644
index 86813701956bc38e2c419b398fb3b7ee6a4d2703..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 347049
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