19b19030aSopenharmony_ci/*
29b19030aSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
39b19030aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49b19030aSopenharmony_ci * you may not use this file except in compliance with the License.
59b19030aSopenharmony_ci * You may obtain a copy of the License at
69b19030aSopenharmony_ci *
79b19030aSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89b19030aSopenharmony_ci *
99b19030aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109b19030aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119b19030aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129b19030aSopenharmony_ci * See the License for the specific language governing permissions and
139b19030aSopenharmony_ci * limitations under the License.
149b19030aSopenharmony_ci */
159b19030aSopenharmony_ci
169b19030aSopenharmony_ciimport update from '@ohos.update';
179b19030aSopenharmony_ciimport { ChangelogType, CountDownDialogType } from '@ohos/common/src/main/ets/const/update_const';
189b19030aSopenharmony_ciimport { IPage, VersionPageInfo } from '@ohos/common/src/main/ets/manager/UpgradeInterface';
199b19030aSopenharmony_ciimport { UpdateUtils } from '@ohos/common/src/main/ets/util/UpdateUtils';
209b19030aSopenharmony_ciimport { FormatUtils } from '@ohos/common/src/main/ets/util/FormatUtils';
219b19030aSopenharmony_ciimport VersionUtils from './util/VersionUtils';
229b19030aSopenharmony_ci
239b19030aSopenharmony_ci/**
249b19030aSopenharmony_ci * ota的ux显示数据
259b19030aSopenharmony_ci *
269b19030aSopenharmony_ci * @since 2022-12-01
279b19030aSopenharmony_ci */
289b19030aSopenharmony_ciexport class OtaPage implements IPage {
299b19030aSopenharmony_ci  /**
309b19030aSopenharmony_ci   * 取新版本数据
319b19030aSopenharmony_ci   *
329b19030aSopenharmony_ci   * @param versionComponents 升级包
339b19030aSopenharmony_ci   * @param componentDescriptions 更新日志
349b19030aSopenharmony_ci   * @return Promise<VersionPageInfo> 具体的新版本数据
359b19030aSopenharmony_ci   */
369b19030aSopenharmony_ci  public async getNewVersionPageInfo(versionComponents: Array<update.VersionComponent>,
379b19030aSopenharmony_ci    componentDescriptions?: Array<update.ComponentDescription>): Promise<VersionPageInfo> {
389b19030aSopenharmony_ci    let component: update.VersionComponent = versionComponents.filter((component: update.VersionComponent) => {
399b19030aSopenharmony_ci      return component.componentType == update.ComponentType.OTA;
409b19030aSopenharmony_ci    })?.[0];
419b19030aSopenharmony_ci    let componentId: string = component?.componentId;
429b19030aSopenharmony_ci    let description: string = '';
439b19030aSopenharmony_ci    if (componentDescriptions) {
449b19030aSopenharmony_ci      description = UpdateUtils.obtainDescription(componentDescriptions, componentId);
459b19030aSopenharmony_ci    }
469b19030aSopenharmony_ci    let isABInstall = await VersionUtils.isABInstall();
479b19030aSopenharmony_ci    const countDownTimes = 20;
489b19030aSopenharmony_ci
499b19030aSopenharmony_ci    return {
509b19030aSopenharmony_ci      version: component.displayVersion,
519b19030aSopenharmony_ci      size: component.size,
529b19030aSopenharmony_ci      effectiveMode: component.effectiveMode,
539b19030aSopenharmony_ci      changelog: {
549b19030aSopenharmony_ci        version: component.displayVersion,
559b19030aSopenharmony_ci        size: FormatUtils.formatFileSize(component.size),
569b19030aSopenharmony_ci        displayType: ChangelogType.PICTURE_AND_TEXT,
579b19030aSopenharmony_ci        content: description
589b19030aSopenharmony_ci      },
599b19030aSopenharmony_ci      countDownDialogInfo: {
609b19030aSopenharmony_ci        dialogText: isABInstall ?
619b19030aSopenharmony_ci          $r('app.string.count_down_message_ab', component.displayVersion, countDownTimes) :
629b19030aSopenharmony_ci          $r('app.string.count_down_message_recovery', component.displayVersion, countDownTimes),
639b19030aSopenharmony_ci        dialogType: isABInstall ? CountDownDialogType.OTA_AB : CountDownDialogType.OTA
649b19030aSopenharmony_ci      }
659b19030aSopenharmony_ci    };
669b19030aSopenharmony_ci  }
679b19030aSopenharmony_ci
689b19030aSopenharmony_ci  /**
699b19030aSopenharmony_ci   * 取当前版本数据
709b19030aSopenharmony_ci   *
719b19030aSopenharmony_ci   * @param versionComponents 升级包
729b19030aSopenharmony_ci   * @param componentDescriptions 更新日志
739b19030aSopenharmony_ci   * @return VersionPageInfo 具体的当前版本数据
749b19030aSopenharmony_ci   */
759b19030aSopenharmony_ci  public getCurrentVersionPageInfo(versionComponents: Array<update.VersionComponent>,
769b19030aSopenharmony_ci    componentDescriptions: Array<update.ComponentDescription>): VersionPageInfo {
779b19030aSopenharmony_ci    let component: update.VersionComponent = versionComponents.filter((component: update.VersionComponent) => {
789b19030aSopenharmony_ci      return component.componentType == update.ComponentType.OTA;
799b19030aSopenharmony_ci    })?.[0];
809b19030aSopenharmony_ci    let componentId: string = component?.componentId;
819b19030aSopenharmony_ci    let description: string = '';
829b19030aSopenharmony_ci    if (componentDescriptions) {
839b19030aSopenharmony_ci      description = UpdateUtils.obtainDescription(componentDescriptions, componentId);
849b19030aSopenharmony_ci    }
859b19030aSopenharmony_ci    return {
869b19030aSopenharmony_ci      version: VersionUtils.getCurrentDisplayVersion(),
879b19030aSopenharmony_ci      changelog: {
889b19030aSopenharmony_ci        version: VersionUtils.getCurrentDisplayVersion(),
899b19030aSopenharmony_ci        content: description
909b19030aSopenharmony_ci      }
919b19030aSopenharmony_ci    };
929b19030aSopenharmony_ci  }
939b19030aSopenharmony_ci}