|
|
@@ -41,6 +41,8 @@ export class FormLayoutManager {
|
|
|
return this.adaptForSmallWidget(baseData, widgetData);
|
|
|
case WidgetSize.MEDIUM:
|
|
|
return this.adaptForMediumWidget(baseData, widgetData);
|
|
|
+ case WidgetSize.SQUARE:
|
|
|
+ return this.adaptForSquareWidget(baseData, widgetData);
|
|
|
case WidgetSize.LARGE:
|
|
|
return this.adaptForLargeWidget(baseData, widgetData);
|
|
|
default:
|
|
|
@@ -136,6 +138,32 @@ export class FormLayoutManager {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 适配方形尺寸卡片 (2x2)
|
|
|
+ */
|
|
|
+ private adaptForSquareWidget(baseData: FormattedWidgetData, widgetData: WidgetData): FormattedWidgetData {
|
|
|
+ hilog.info(0x0000, TAG, `Adapting for square widget: coverImage=${baseData.coverImage}`);
|
|
|
+
|
|
|
+ return {
|
|
|
+ isPlaying: baseData.isPlaying,
|
|
|
+ isPaused: baseData.isPaused,
|
|
|
+ isLoading: baseData.isLoading,
|
|
|
+ songTitle: this.truncateText(widgetData.currentSong.title, 20),
|
|
|
+ songArtist: this.truncateText(widgetData.currentSong.artist, 15),
|
|
|
+ songAlbum: baseData.songAlbum,
|
|
|
+ coverImage: widgetData.currentSong.coverImagePath || '', // 确保coverImage被正确传递
|
|
|
+ currentTime: baseData.currentTime,
|
|
|
+ totalTime: baseData.totalTime,
|
|
|
+ progressPercentage: baseData.progressPercentage,
|
|
|
+ hasNext: baseData.hasNext,
|
|
|
+ hasPrevious: baseData.hasPrevious,
|
|
|
+ showProgress: false,
|
|
|
+ showCover: true,
|
|
|
+ widgetSize: baseData.widgetSize,
|
|
|
+ timestamp: baseData.timestamp
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 适配大尺寸卡片
|
|
|
*/
|
|
|
@@ -181,6 +209,8 @@ export class FormLayoutManager {
|
|
|
return 'widget/pages/PlayerWidgetSmall';
|
|
|
case WidgetSize.MEDIUM:
|
|
|
return 'widget/pages/PlayerWidgetMedium';
|
|
|
+ case WidgetSize.SQUARE:
|
|
|
+ return 'widget/pages/PlayerWidgetSquare';
|
|
|
case WidgetSize.LARGE:
|
|
|
return 'widget/pages/PlayerWidgetLarge';
|
|
|
default:
|
|
|
@@ -229,6 +259,13 @@ export class FormLayoutManager {
|
|
|
showProgress: false,
|
|
|
showCover: true
|
|
|
};
|
|
|
+ case WidgetSize.SQUARE:
|
|
|
+ return {
|
|
|
+ size: baseConfig.size,
|
|
|
+ theme: baseConfig.theme,
|
|
|
+ showProgress: false,
|
|
|
+ showCover: true
|
|
|
+ };
|
|
|
case WidgetSize.LARGE:
|
|
|
return {
|
|
|
size: baseConfig.size,
|
|
|
@@ -260,14 +297,17 @@ export class FormLayoutManager {
|
|
|
return sizeStr as WidgetSize;
|
|
|
}
|
|
|
|
|
|
- // 尝试从维度字符串解析 (如 "2*1", "4*2", "4*3")
|
|
|
+ // 尝试从维度字符串解析 (如 "1*2", "2*4", "2*2")
|
|
|
switch (sizeStr) {
|
|
|
- case '2*1':
|
|
|
- case '2x1':
|
|
|
+ case '1*2':
|
|
|
+ case '1x2':
|
|
|
return WidgetSize.SMALL;
|
|
|
- case '4*2':
|
|
|
- case '4x2':
|
|
|
+ case '2*4':
|
|
|
+ case '2x4':
|
|
|
return WidgetSize.MEDIUM;
|
|
|
+ case '2*2':
|
|
|
+ case '2x2':
|
|
|
+ return WidgetSize.SQUARE;
|
|
|
case '4*3':
|
|
|
case '4x3':
|
|
|
return WidgetSize.LARGE;
|
|
|
@@ -324,6 +364,26 @@ export class FormLayoutManager {
|
|
|
spacing: mediumSpacing,
|
|
|
showElements: mediumShowElements
|
|
|
};
|
|
|
+ case WidgetSize.SQUARE:
|
|
|
+ const squarePadding: ContainerPadding = { left: 16, right: 16, top: 16, bottom: 16 };
|
|
|
+ const squareButtonSize: ButtonSize = { width: 40, height: 40 };
|
|
|
+ const squarePlayButtonSize: ButtonSize = { width: 56, height: 56 };
|
|
|
+ const squareFontSize: FontSizeConfig = { title: 18, artist: 14, time: 12 };
|
|
|
+ const squareSpacing: SpacingConfig = { horizontal: 16, vertical: 12 };
|
|
|
+ const squareShowElements: ShowElementsConfig = {
|
|
|
+ progress: false,
|
|
|
+ cover: true,
|
|
|
+ album: false,
|
|
|
+ time: false
|
|
|
+ };
|
|
|
+ return {
|
|
|
+ containerPadding: squarePadding,
|
|
|
+ buttonSize: squareButtonSize,
|
|
|
+ playButtonSize: squarePlayButtonSize,
|
|
|
+ fontSize: squareFontSize,
|
|
|
+ spacing: squareSpacing,
|
|
|
+ showElements: squareShowElements
|
|
|
+ };
|
|
|
case WidgetSize.LARGE:
|
|
|
const largePadding: ContainerPadding = { left: 16, right: 16, top: 16, bottom: 16 };
|
|
|
const largeButtonSize: ButtonSize = { width: 40, height: 40 };
|