|
|
@@ -1,4 +1,4 @@
|
|
|
-import { formBindingData, FormExtensionAbility, formInfo, formProvider } from '@kit.FormKit';
|
|
|
+import { formBindingData, FormExtensionAbility, formProvider } from '@kit.FormKit';
|
|
|
import { Want } from '@kit.AbilityKit';
|
|
|
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
|
import { PreferencesUtil } from '../common/utils/PreferencesUtil';
|
|
|
@@ -14,6 +14,21 @@ const TAG = 'EntryFormAbility';
|
|
|
* 负责处理卡片的生命周期管理和用户交互事件
|
|
|
* 支持多尺寸适配和UI重构
|
|
|
*/
|
|
|
+interface GeneratedObjectLiteralInterface_1 {
|
|
|
+ name: string;
|
|
|
+ artist: string;
|
|
|
+ album: string;
|
|
|
+ imageColorHex: string;
|
|
|
+ isPlaying: boolean;
|
|
|
+ isPaused: boolean;
|
|
|
+ isLoading: boolean;
|
|
|
+ currentTimeText: string;
|
|
|
+ totalTimeText: string;
|
|
|
+ progressPercentage: number;
|
|
|
+ imgName: string;
|
|
|
+ isFavorite: boolean;
|
|
|
+}
|
|
|
+
|
|
|
export default class EntryFormAbility extends FormExtensionAbility {
|
|
|
private unifiedPlayerService:UnifiedPlayerService = UnifiedPlayerService.getInstance();
|
|
|
|
|
|
@@ -24,7 +39,7 @@ export default class EntryFormAbility extends FormExtensionAbility {
|
|
|
*/
|
|
|
onAddForm(want: Want): formBindingData.FormBindingData {
|
|
|
hilog.info(0x0000, TAG, 'onAddForm');
|
|
|
-
|
|
|
+
|
|
|
// 检查参数有效性
|
|
|
if (!want || !want.parameters) {
|
|
|
hilog.error(0x0000, TAG, 'FormAbility onAddForm want or want.parameters is undefined');
|
|
|
@@ -65,19 +80,51 @@ export default class EntryFormAbility extends FormExtensionAbility {
|
|
|
formInfo.formName = formName;
|
|
|
|
|
|
hilog.info(0x0000, TAG, `onAddForm formInfo: ${JSON.stringify(formInfo)}`);
|
|
|
-
|
|
|
+
|
|
|
// 保存到数据库
|
|
|
FormRdbHelper.getInstance(this.context).insertForm(formInfo).catch((error: Error) => {
|
|
|
hilog.error(0x0000, TAG, `Failed to insert form to database: ${error.message}`);
|
|
|
});
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- // 返回初始数据作为临时显示
|
|
|
- const adaptedData = this.unifiedPlayerService.getWidgetFormData();
|
|
|
- console.info(`[EntryFormAbility] onAddForm returning data for ${formId}:`, JSON.stringify(adaptedData));
|
|
|
+ // 异步获取真实数据并更新卡片
|
|
|
+ this.updateFormWithRealData(formId);
|
|
|
+
|
|
|
+ // 立即返回一个加载中的临时数据,以满足同步返回的要求
|
|
|
+ const loadingData: GeneratedObjectLiteralInterface_1 = {
|
|
|
+ name: '正在加载...',
|
|
|
+ artist: '请稍候',
|
|
|
+ album: '',
|
|
|
+ imageColorHex: '2A2A2A',
|
|
|
+ isPlaying: false,
|
|
|
+ isPaused: true,
|
|
|
+ isLoading: true,
|
|
|
+ currentTimeText: '00:00',
|
|
|
+ totalTimeText: '00:00',
|
|
|
+ progressPercentage: 0,
|
|
|
+ imgName: '',
|
|
|
+ isFavorite: false
|
|
|
+ };
|
|
|
+ hilog.info(0x0000, TAG, `[${formId}] Returning initial loading data.`);
|
|
|
+ return formBindingData.createFormBindingData(loadingData);
|
|
|
+ }
|
|
|
|
|
|
- return formBindingData.createFormBindingData(adaptedData);
|
|
|
+ /**
|
|
|
+ * 异步更新卡片真实数据
|
|
|
+ * @param formId 卡片ID
|
|
|
+ */
|
|
|
+ private updateFormWithRealData(formId: string): void {
|
|
|
+ // 使用setTimeout确保此操作在当前事件循环之后执行
|
|
|
+ setTimeout(async () => {
|
|
|
+ try {
|
|
|
+ hilog.info(0x0000, TAG, `[${formId}] Starting async data fetch for new form.`);
|
|
|
+ const realBindingData = await this.unifiedPlayerService.onFormAdded(formId);
|
|
|
+ await formProvider.updateForm(formId, realBindingData);
|
|
|
+ hilog.info(0x0000, TAG, `[${formId}] Successfully updated form with real data.`);
|
|
|
+ } catch (error) {
|
|
|
+ hilog.error(0x0000, TAG, `[${formId}] Failed to update form with real data: ${error}`);
|
|
|
+ }
|
|
|
+ }, 100); // 延迟100ms,给服务一点初始化时间
|
|
|
}
|
|
|
|
|
|
|