• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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