refactor(harmony): 23 处废弃 API 换成 UIContext 写法(全局 promptAction.showToast 自 API 18 废弃)

SDK 里写得很清楚:`@ohos.promptAction.d.ts` 的全局 `showToast` 标着 `@deprecated since 18`,
替代品是 `UIContext.getPromptAction()`。仓库里有 23 处这种调用(6 个页面,历史遗留)——
这一轮既然在按"用系统方案"整理鸿蒙侧,就一次扫干净,并加判据挡住回潮。

- `promptAction.showToast(...)` → `this.getUIContext().getPromptAction().showToast(...)`(23 处)
- 清掉不再需要的 `promptAction` import(多个 → 只留 `router` 等)
- 新增判据:不得再用全局写法。防的不是这次,而是**新增页面照抄旧代码**这条回退路径 ——
  它编译照样通过、只在真机上行为不同。自检同时验"认得出旧写法"与"不误伤新写法"。
- 顺带把权限徽标那条"点它弹说明"的判据改成钉**非废弃**写法(原来是 `promptAction.showToast(`)。

变异验证:把 `SettingsPage` 的一处改回全局写法 → 判红并点出文件。

验证:`hvigorw assembleHap` BUILD SUCCESSFUL;`npm test` 退出码 0(harmony-logic 20 条)。
This commit is contained in:
2026-09-14 14:05:35 +08:00
parent 36f3183bba
commit c6aaf8c468
8 changed files with 71 additions and 27 deletions

View File

@ -9,7 +9,6 @@ import { MailApi } from '../api/MailApi';
import { AccountManager, AccountInfo } from '../api/AccountManager';
import { SendMailRequest } from '../model/Models';
import { ComposeParams } from '../model/RouteParams';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { picker } from '@kit.CoreFileKit';
@ -92,7 +91,7 @@ struct ComposePage {
const mailApi: MailApi | null = this.createSelectedMailApi(ctx);
if (mailApi === null) {
promptAction.showToast({ message: '请先选择发信账号' });
this.getUIContext().getPromptAction().showToast({ message: '请先选择发信账号' });
return;
}
this.uploading = true;
@ -108,7 +107,7 @@ struct ComposePage {
hilog.info(0x0001, 'Compose', 'uploaded: %{public}s → %{public}s', name, attachmentId);
} catch (e) {
const apiError = e as ApiError;
promptAction.showToast({ message: '上传失败: ' + name + ' - ' + apiError.message });
this.getUIContext().getPromptAction().showToast({ message: '上传失败: ' + name + ' - ' + apiError.message });
}
}
this.status = this.attachmentIds.length + ' 个附件已上传';
@ -133,11 +132,11 @@ struct ComposePage {
return;
}
if (this.to.length === 0) {
promptAction.showToast({ message: '请填写收件人' });
this.getUIContext().getPromptAction().showToast({ message: '请填写收件人' });
return;
}
if (this.subject.length === 0) {
promptAction.showToast({ message: '请填写主题' });
this.getUIContext().getPromptAction().showToast({ message: '请填写主题' });
return;
}
const ctx: Context | undefined = this.getUIContext().getHostContext();
@ -146,7 +145,7 @@ struct ComposePage {
}
const mailApi: MailApi | null = this.createSelectedMailApi(ctx);
if (mailApi === null) {
promptAction.showToast({ message: '请先选择发信账号' });
this.getUIContext().getPromptAction().showToast({ message: '请先选择发信账号' });
return;
}
@ -166,11 +165,11 @@ struct ComposePage {
request.attachment_ids = this.attachmentIds;
}
await mailApi.send(request);
promptAction.showToast({ message: '✅ 邮件已发送' });
this.getUIContext().getPromptAction().showToast({ message: '✅ 邮件已发送' });
this.getUIContext().getRouter().back();
} catch (e) {
const apiError = e as ApiError;
promptAction.showToast({ message: '发送失败: ' + apiError.message });
this.getUIContext().getPromptAction().showToast({ message: '发送失败: ' + apiError.message });
} finally {
this.sending = false;
}