1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "firmware_manager.h"
17
18 #include <cstdlib>
19 #include <thread>
20
21 #include "config_parse.h"
22 #include "dupdate_errno.h"
23 #include "dupdate_upgrade_helper.h"
24 #ifdef NETMANAGER_BASE_ENABLE
25 #include "dupdate_net_manager.h"
26 #endif
27 #include "file_utils.h"
28 #include "firmware_callback_utils.h"
29 #include "firmware_changelog_utils.h"
30 #include "firmware_common.h"
31 #include "firmware_constant.h"
32 #include "firmware_database.h"
33 #include "firmware_event_listener.h"
34 #include "firmware_flow_manager.h"
35 #include "firmware_iexecute_mode.h"
36 #include "firmware_log.h"
37 #include "firmware_manual_check_mode.h"
38 #include "firmware_download_mode.h"
39 #include "firmware_install_apply_mode.h"
40 #include "firmware_stream_install_apply_mode.h"
41 #include "firmware_status_cache.h"
42 #include "firmware_task_operator.h"
43 #include "firmware_update_helper.h"
44 #include "progress_thread.h"
45 #include "schedule_task.h"
46 #include "startup_schedule.h"
47 #include "string_utils.h"
48 #include "time_utils.h"
49
50 namespace OHOS {
51 namespace UpdateService {
52 constexpr int32_t INIT_DELAY_TIME = 5; // 进程启动延时时间5秒,为了安装重启之后可以看到版本号及时刷新
53 constexpr int32_t PROCESS_EXIT_DELAY_TIME = 1; // 进程退出等待时间,单位:秒
54 constexpr uint64_t PULLUP_AFTER_TERMINATE_INTERVAL = 5; // 终止升级后SA拉起间隔
55
FirmwareManager()56 FirmwareManager::FirmwareManager() {}
57
~FirmwareManager()58 FirmwareManager::~FirmwareManager()
59 {
60 DelayedSingleton<FirmwareEventListener>::GetInstance()->UnregisterNetChangedListener();
61 }
62
Init(StartupReason startupReason)63 void FirmwareManager::Init(StartupReason startupReason)
64 {
65 DelayedSingleton<ConfigParse>::GetInstance()->LoadConfigInfo(); // 启动读取配置信息
66 FIRMWARE_LOGI("FirmwareManager Init");
67
68 // 当StartupReason为PROCESS_ENV_RESET时, 会进行以下处理:
69 // 1. 删除Firmware目录(FIRMWARE_DIR_INFOS)中的所有允许删除的目录中的所有文件及子目录
70 // 2. 清空Firmware SP(FirmwarePreferencesUtil)中所有记录
71 // 3. 删除数据库(FirmwareDatabase/DownloadDatabase)
72 if (startupReason == StartupReason::PROCESS_ENV_RESET) {
73 FileUtils::DestroyBaseDirectory(FIRMWARE_DIR_INFOS);
74 preferencesUtil_->RemoveAll();
75 DelayedSingleton<FirmwareDatabase>::GetInstance()->DeleteDbStore();
76 }
77 FileUtils::InitAndCreateBaseDirs(FIRMWARE_DIR_INFOS);
78
79 std::thread initThread([this, startupReason] { this->DelayInit(startupReason); });
80 initThread.detach();
81 }
82
DelayInit(StartupReason startupReason)83 void FirmwareManager::DelayInit(StartupReason startupReason)
84 {
85 FIRMWARE_LOGI("FirmwareManager DelayInit startupReason %{public}d", startupReason);
86 RestoreUpdate();
87 DelayedSingleton<FirmwareEventListener>::GetInstance()->RegisterNetChangedListener();
88
89 auto eventType = CommonEventType::PROCESS_INIT;
90 if (startupReason == StartupReason::DEVICE_REBOOT) {
91 // 重启启动,延时5秒,等待系统初始化完再恢复周期提醒alarm | 执行升级结果判断 避免出现通知hap拉不起的问题
92 sleep(INIT_DELAY_TIME);
93 eventType = CommonEventType::BOOT_COMPLETE;
94 }
95
96 // 以下两种情况会向OUC发送初始启动消息:
97 // 1. DUE启动原因为StartupReason::PROCESS_ENV_RESET,DUE缓存数据清空
98 // 2. DUE首次启动,还未向OUC发送过初始启动消息
99 NotifyInitEvent();
100
101 // 处理 设备重启/进程初始化 事件
102 HandleEvent(eventType);
103 }
104
RestoreUpdate()105 void FirmwareManager::RestoreUpdate()
106 {
107 FirmwareTask firmwareTask;
108 FirmwareTaskOperator().QueryTask(firmwareTask);
109 FIRMWARE_LOGI("RestoreUpdate status: %{public}d", firmwareTask.status);
110 if (firmwareTask.status == UpgradeStatus::DOWNLOAD_PAUSE) {
111 HandleBootDownloadPauseStatusProcess(firmwareTask);
112 return;
113 }
114 if (firmwareTask.status == UpgradeStatus::DOWNLOADING) {
115 HandleBootDownloadOnStatusProcess(firmwareTask);
116 return;
117 }
118 if (firmwareTask.status == UpgradeStatus::DOWNLOAD_SUCCESS) {
119 HandleBootDownloadedStatusProcess(firmwareTask);
120 return;
121 }
122
123 if (firmwareTask.status == UpgradeStatus::INSTALLING) {
124 HandleBootInstallOnStatusProcess(firmwareTask);
125 return;
126 }
127 }
128
IsIdle()129 bool FirmwareManager::IsIdle()
130 {
131 if (DelayedSingleton<FirmwareStatusCache>::GetInstance()->IsChecking()) {
132 FIRMWARE_LOGI("FirmwareManager IsIdle checking");
133 return false;
134 }
135
136 FirmwareTask task;
137 FirmwareTaskOperator().QueryTask(task);
138 bool isIdle = !task.isExistTask;
139 FIRMWARE_LOGI("FirmwareManager IsIdle:%{public}s", StringUtils::GetBoolStr(isIdle).c_str());
140 return isIdle;
141 }
142
GetScheduleTasks()143 std::vector<ScheduleTask> FirmwareManager::GetScheduleTasks()
144 {
145 ScheduleTask scheduleTask;
146 return {scheduleTask};
147 }
148
Exit()149 bool FirmwareManager::Exit()
150 {
151 FIRMWARE_LOGI("FirmwareManager Exit");
152 return true;
153 }
154
DoCancel(BusinessError & businessError)155 void FirmwareManager::DoCancel(BusinessError &businessError)
156 {
157 FirmwareTask task;
158 FirmwareTaskOperator().QueryTask(task);
159 if (!task.isExistTask) {
160 FIRMWARE_LOGI("DoCancel no task");
161 businessError.Build(CallResult::FAIL, "no download task to cancel!");
162 businessError.AddErrorMessage(CAST_INT(DUPDATE_ERR_DOWNLOAD_COMMON_ERROR), "no download task to cancel!");
163 return;
164 }
165 ProgressThread::isCancel_ = true;
166 return;
167 }
168
DoTerminateUpgrade(BusinessError & businessError)169 void FirmwareManager::DoTerminateUpgrade(BusinessError &businessError)
170 {
171 ScheduleTask scheduleTask;
172 scheduleTask.startupReason = StartupReason::PROCESS_ENV_RESET;
173 scheduleTask.minDelayTime = PULLUP_AFTER_TERMINATE_INTERVAL;
174 if (!DelayedSingleton<StartupSchedule>::GetInstance()->Schedule(scheduleTask)) {
175 FIRMWARE_LOGE("DoTerminateUpgrade fail");
176 businessError.AddErrorMessage(CAST_INT(DUPDATE_ERR_INTERNAL_ERROR), "terminate upgrade error!");
177 return;
178 }
179
180 // 主线程拉起子线程之后向OUC返回回调结果,子线程sleep 1秒之后,DUE进程退出
181 auto execFunc = []() {
182 sleep(PROCESS_EXIT_DELAY_TIME);
183 _Exit(0);
184 };
185 std::thread th = std::thread(execFunc);
186 th.detach();
187 }
188
DoCheck(OnCheckComplete onCheckComplete)189 void FirmwareManager::DoCheck(OnCheckComplete onCheckComplete)
190 {
191 auto *flowManager = new FirmwareFlowManager();
192 std::shared_ptr<FirmwareIExecuteMode> executeMode =
193 std::make_shared<FirmwareManualCheckMode>([=](BusinessError &businessError, CheckResult &checkResult) {
194 FIRMWARE_LOGI("FirmwareManager DoCheck newVersionInfoResult");
195 onCheckComplete(businessError, checkResult);
196 delete flowManager;
197 });
198 flowManager->SetExecuteMode(executeMode);
199 flowManager->Start();
200 }
201
DoDownload(const DownloadOptions & downloadOptions,BusinessError & businessError)202 void FirmwareManager::DoDownload(const DownloadOptions &downloadOptions, BusinessError &businessError)
203 {
204 auto *flowManager = new FirmwareFlowManager();
205 std::shared_ptr<FirmwareIExecuteMode> executeMode =
206 std::make_shared<FirmwareDownloadMode>(downloadOptions, businessError, [=]() {
207 FIRMWARE_LOGI("FirmwareManager DoDownload finish");
208 delete flowManager;
209 });
210 flowManager->SetExecuteMode(executeMode);
211 flowManager->Start();
212 }
213
CanInstall(void)214 bool FirmwareManager::CanInstall(void)
215 {
216 FirmwareTask task;
217 FirmwareTaskOperator firmwareTaskOperator;
218 firmwareTaskOperator.QueryTask(task);
219 FIRMWARE_LOGI("check can install task.status:%{public}d", CAST_INT(task.status));
220 InstallType InstallType = FirmwareUpdateHelper::GetInstallType();
221 if (InstallType == InstallType::SYS_INSTALLER) {
222 return task.status == UpgradeStatus::DOWNLOAD_SUCCESS || task.status == UpgradeStatus::INSTALL_SUCCESS;
223 } else if (InstallType == InstallType::STREAM_INSTALLLER) {
224 return task.status != UpgradeStatus::INSTALLING;
225 } else {
226 return task.status == UpgradeStatus::DOWNLOAD_SUCCESS;
227 }
228 }
229
DoInstall(const UpgradeOptions & upgradeOptions,BusinessError & businessError,InstallType installType)230 void FirmwareManager::DoInstall(const UpgradeOptions &upgradeOptions, BusinessError &businessError,
231 InstallType installType)
232 {
233 FIRMWARE_LOGI("FirmwareManager DoInstall upgradeOptions order:%{public}d, installType = %{public}d",
234 CAST_INT(upgradeOptions.order), CAST_INT(installType));
235 if (!CanInstall()) {
236 FIRMWARE_LOGI("status can not Install");
237 return;
238 }
239 FirmwareFlowManager *flowManager = new FirmwareFlowManager();
240 std::shared_ptr<FirmwareIExecuteMode> executeMode;
241 if (FirmwareUpdateHelper::IsStreamUpgrade()) {
242 executeMode =
243 std::make_shared<FirmwareStreamInstallApplyMode>(upgradeOptions, businessError, installType, [=]() {
244 FIRMWARE_LOGI("FirmwareManager DoInstall finish");
245 delete flowManager;
246 });
247 } else {
248 executeMode =
249 std::make_shared<FirmwareInstallApplyMode>(upgradeOptions, businessError, installType, [=]() {
250 FIRMWARE_LOGI("FirmwareManager DoInstall finish");
251 delete flowManager;
252 });
253 }
254
255 flowManager->SetExecuteMode(executeMode);
256 flowManager->Start();
257 }
258
DoAutoDownloadSwitchChanged(bool isDownloadSwitchOn)259 void FirmwareManager::DoAutoDownloadSwitchChanged(bool isDownloadSwitchOn)
260 {
261 FIRMWARE_LOGI("DoAutoDownloadSwitchChanged isDownloadSwitchOn %{public}s", isDownloadSwitchOn ? "on" : "off");
262 preferencesUtil_->SaveBool(Firmware::AUTO_DOWNLOAD_SWITCH, isDownloadSwitchOn);
263 FirmwareTask task;
264 FirmwareTaskOperator().QueryTask(task);
265 if (!task.isExistTask) {
266 FIRMWARE_LOGI("DoAutoDownloadSwitchChanged no task");
267 return;
268 }
269 FIRMWARE_LOGI("DoAutoDownloadSwitchChanged current task status %{public}d", task.status);
270 // 当前是否有搜索完待下载的包
271 if (task.status != UpgradeStatus::CHECK_VERSION_SUCCESS) {
272 return;
273 }
274 if (!isDownloadSwitchOn) {
275 // 开关关,发送新版本通知
276 DelayedSingleton<FirmwareCallbackUtils>::GetInstance()->NotifyEvent(
277 task.taskId, EventId::EVENT_DOWNLOAD_WAIT, UpgradeStatus::CHECK_VERSION_SUCCESS);
278 }
279 }
280
DoClearError(BusinessError & businessError)281 void FirmwareManager::DoClearError(BusinessError &businessError)
282 {
283 FirmwareTask task;
284 FirmwareTaskOperator().QueryTask(task);
285 if (!task.isExistTask) {
286 FIRMWARE_LOGI("DoClearError has no task");
287 return;
288 }
289 if (!FirmwareUpdateHelper::IsUpgradeFailed(task.status)) {
290 businessError.Build(CallResult::FAIL, "please check status before clear error");
291 businessError.AddErrorMessage(CAST_INT(DUPDATE_ERR_UPDATE_COMMON_ERROR),
292 "please check status before clear error");
293 return;
294 }
295 FirmwareUpdateHelper::ClearFirmwareInfo();
296 }
297
HandleEvent(CommonEventType event)298 void FirmwareManager::HandleEvent(CommonEventType event)
299 {
300 FIRMWARE_LOGI("handleEvent event %{public}d", static_cast<uint32_t>(event));
301 switch (event) {
302 case CommonEventType::NET_CHANGED:
303 HandleNetChanged();
304 break;
305 case CommonEventType::BOOT_COMPLETE:
306 HandleBootComplete();
307 break;
308 default:
309 break;
310 }
311 }
312
HandleBootComplete()313 void FirmwareManager::HandleBootComplete()
314 {
315 FIRMWARE_LOGI("HandleBootComplete");
316 FirmwareTask task;
317 FirmwareTaskOperator().QueryTask(task);
318 if (!task.isExistTask) {
319 FIRMWARE_LOGI("HandleBootComplete has no task");
320 return;
321 }
322
323 FIRMWARE_LOGI("HandleBootComplete status %{public}d", CAST_INT(task.status));
324 if (task.status == UpgradeStatus::UPDATING) {
325 HandleBootUpdateOnStatusProcess(task);
326 return;
327 }
328
329 // ab 升级安装完成
330 if (task.status == UpgradeStatus::INSTALL_SUCCESS) {
331 HandleBootUpdateSuccess(task);
332 return;
333 }
334 }
335
HandleNetChanged()336 void FirmwareManager::HandleNetChanged()
337 {
338 FIRMWARE_LOGI("HandleNetChanged");
339 #ifdef NETMANAGER_BASE_ENABLE
340 if (!DelayedSingleton<NetManager>::GetInstance()->IsNetAvailable()) {
341 FIRMWARE_LOGE("HandleNetChanged network not available.");
342 ProgressThread::isNoNet_ = true;
343 return;
344 }
345
346 ProgressThread::isNoNet_ = false;
347 FirmwareTask task;
348 FirmwareTaskOperator().QueryTask(task);
349 FIRMWARE_LOGI("HandleNetChanged status %{public}d", task.status);
350
351 if (!DelayedSingleton<NetManager>::GetInstance()->IsNetAvailable(NetType::NOT_METERED_WIFI)) {
352 return;
353 }
354
355 if (task.status == UpgradeStatus::DOWNLOAD_PAUSE) {
356 HandleResumeDownload(task);
357 return;
358 }
359
360 if (task.status == UpgradeStatus::CHECK_VERSION_SUCCESS) {
361 bool isDownloadSwitchOn = preferencesUtil_->ObtainBool(Firmware::AUTO_DOWNLOAD_SWITCH, false);
362 FIRMWARE_LOGI("HandleNetChanged isDownloadSwitchOn %{public}s",
363 StringUtils::GetBoolStr(isDownloadSwitchOn).c_str());
364 if (isDownloadSwitchOn) {
365 DoAutoDownload(task);
366 }
367 }
368 #endif
369 }
370
371 // updater调用后正常启动
HandleBootUpdateOnStatusProcess(const FirmwareTask & task)372 void FirmwareManager::HandleBootUpdateOnStatusProcess(const FirmwareTask &task)
373 {
374 FIRMWARE_LOGI("HandleBootUpdateOnStatusProcess");
375 FirmwareResultProcess resultProcess;
376 std::map<std::string, UpdateResult> resultMap;
377 std::vector<FirmwareComponent> components;
378 FirmwareComponentOperator().QueryAll(components);
379 switch (resultProcess.GetUpdaterResult(components, resultMap)) {
380 case UpdateResultCode::SUCCESS:
381 HandleBootUpdateSuccess(task);
382 break;
383 case UpdateResultCode::FAILURE:
384 HandleBootUpdateFail(task, resultMap);
385 break;
386 default:
387 break;
388 }
389 }
390
HandleBootUpdateSuccess(const FirmwareTask & task)391 void FirmwareManager::HandleBootUpdateSuccess(const FirmwareTask &task)
392 {
393 preferencesUtil_->SaveString(Firmware::UPDATE_ACTION, "upgrade");
394 std::vector<FirmwareComponent> components;
395 FirmwareComponentOperator().QueryAll(components);
396 std::vector<VersionComponent> versionComponents;
397 for (const auto &component : components) {
398 VersionComponent versionComponent;
399 versionComponent.componentType = CAST_INT(ComponentType::OTA);
400 versionComponent.componentId = component.componentId;
401 versionComponent.upgradeAction = UpgradeAction::UPGRADE;
402 versionComponent.displayVersion = component.targetBlDisplayVersionNumber;
403 versionComponent.innerVersion = component.targetBlVersionNumber;
404 versionComponent.componentExtra = JsonBuilder().Append("{}").ToJson();
405 versionComponents.push_back(versionComponent);
406 }
407
408 DelayedSingleton<FirmwareChangelogUtils>::GetInstance()->SaveHotaCurrentVersionComponentId();
409 if (task.combinationType == CombinationType::HOTA) {
410 FIRMWARE_LOGI("notify upgrade success");
411 DelayedSingleton<FirmwareCallbackUtils>::GetInstance()->NotifyEvent(task.taskId, EventId::EVENT_UPGRADE_SUCCESS,
412 UpgradeStatus::UPDATE_SUCCESS, ErrorMessage{}, versionComponents);
413 FirmwareUpdateHelper::ClearFirmwareInfo();
414 return;
415 }
416 }
417
HandleBootUpdateFail(const FirmwareTask & task,const std::map<std::string,UpdateResult> & resultMap)418 void FirmwareManager::HandleBootUpdateFail(const FirmwareTask &task,
419 const std::map<std::string, UpdateResult> &resultMap)
420 {
421 preferencesUtil_->SaveString(Firmware::UPDATE_ACTION, "recovery");
422 std::vector<FirmwareComponent> components;
423 FirmwareComponentOperator().QueryAll(components);
424 std::vector<VersionComponent> versionComponents;
425 for (const auto &component : components) {
426 VersionComponent versionComponent;
427 versionComponent.componentType = CAST_INT(ComponentType::OTA);
428 versionComponent.componentId = component.componentId;
429 versionComponent.upgradeAction = UpgradeAction::UPGRADE;
430 versionComponent.displayVersion = component.targetBlDisplayVersionNumber;
431 versionComponent.innerVersion = component.targetBlVersionNumber;
432 versionComponent.componentExtra = JsonBuilder().Append("{}").ToJson();
433 versionComponents.push_back(versionComponent);
434 }
435
436 ErrorMessage errorMessage;
437 for (const auto &result : resultMap) {
438 if (result.second.result == UPDATER_RESULT_FAILURE) {
439 errorMessage.errorCode = CAST_INT(result.second.GetUpdateResultCode());
440 errorMessage.errorMessage = result.second.reason;
441 break;
442 }
443 }
444
445 DelayedSingleton<FirmwareCallbackUtils>::GetInstance()->NotifyEvent(task.taskId, EventId::EVENT_UPGRADE_FAIL,
446 UpgradeStatus::UPDATE_FAIL, errorMessage, versionComponents);
447 FIRMWARE_LOGI("upgrade fail");
448 FirmwareUpdateHelper::ClearFirmwareInfo();
449 }
450
451 // sysInstaller安装中重启,进度回退为下载完成
HandleBootInstallOnStatusProcess(FirmwareTask & task)452 void FirmwareManager::HandleBootInstallOnStatusProcess(FirmwareTask &task)
453 {
454 FIRMWARE_LOGI("HandleBootInstallOnStatusProcess");
455 if (FirmwareUpdateHelper::IsStreamUpgrade()) {
456 FirmwareTaskOperator().UpdateStatusByTaskId(task.taskId, UpgradeStatus::INSTALL_PAUSE);
457 } else {
458 FirmwareTaskOperator().UpdateProgressByTaskId(
459 task.taskId, UpgradeStatus::DOWNLOAD_SUCCESS, Firmware::ONE_HUNDRED);
460 }
461
462 std::vector<FirmwareComponent> firmwareComponentList;
463 FirmwareComponentOperator firmwareComponentOperator;
464 firmwareComponentOperator.QueryAll(firmwareComponentList);
465 for (const FirmwareComponent &component : firmwareComponentList) {
466 if (component.status == UpgradeStatus::INSTALLING) {
467 if (FirmwareUpdateHelper::IsStreamUpgrade()) {
468 firmwareComponentOperator.UpdateStatusByUrl(
469 component.url, UpgradeStatus::INSTALL_PAUSE);
470 } else {
471 firmwareComponentOperator.UpdateProgressByUrl(
472 component.url, UpgradeStatus::DOWNLOAD_SUCCESS, Firmware::ONE_HUNDRED);
473 }
474 }
475 }
476 BusinessError businessError;
477 UpgradeOptions upgradeOptions;
478 upgradeOptions.order = Order::INSTALL_AND_APPLY;
479 DoInstall(upgradeOptions, businessError, FirmwareUpdateHelper::GetInstallType());
480 }
481
HandleBootDownloadOnStatusProcess(FirmwareTask & task)482 void FirmwareManager::HandleBootDownloadOnStatusProcess(FirmwareTask &task)
483 {
484 // 下载中重启,清除记录和数据
485 FIRMWARE_LOGI("HandleBootDownloadOnStatusProcess ClearFirmwareInfo");
486 FirmwareUpdateHelper::ClearFirmwareInfo();
487 }
488
HandleBootDownloadPauseStatusProcess(FirmwareTask & task)489 void FirmwareManager::HandleBootDownloadPauseStatusProcess(FirmwareTask &task)
490 {
491 FirmwareUpdateHelper::ClearFirmwareInfo();
492 }
493
HandleResumeDownload(FirmwareTask & task)494 void FirmwareManager::HandleResumeDownload(FirmwareTask &task)
495 {
496 FIRMWARE_LOGI("HandleResumeDownload");
497 }
498
HandleBootDownloadedStatusProcess(FirmwareTask & task)499 void FirmwareManager::HandleBootDownloadedStatusProcess(FirmwareTask &task)
500 {
501 FIRMWARE_LOGI("HandleBootDownloadedStatusProcess");
502 }
503
DoAutoDownload(const FirmwareTask & task)504 void FirmwareManager::DoAutoDownload(const FirmwareTask &task)
505 {
506 FIRMWARE_LOGI("DoAutoDownload");
507 }
508
NotifyInitEvent()509 void FirmwareManager::NotifyInitEvent()
510 {
511 bool dueInitFlag = preferencesUtil_->ObtainBool(Constant::DUE_INIT_FLAG, false);
512 FIRMWARE_LOGI("DUE_INIT_FLAG is %{public}s", StringUtils::GetBoolStr(dueInitFlag).c_str());
513 if (!dueInitFlag) {
514 preferencesUtil_->SaveBool(Constant::DUE_INIT_FLAG, true);
515 DelayedSingleton<FirmwareCallbackUtils>::GetInstance()->NotifyEvent("", EventId::EVENT_INITIALIZE,
516 UpgradeStatus::INIT);
517 }
518 }
519 } // namespace UpdateService
520 } // namespace OHOS
521