diff --git a/entry/src/main/config.json b/entry/src/main/config.json index f5878c2c5316795f026a468669a3526af1e2ee40..8035b7263d7318c09b402f276ac9fb252ece7c75 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -1,20 +1,20 @@ { "app": { - "bundleName": "com.runhe.ota.updateclient", - "vendor": "runhe", + "bundleName": "com.ohos.ota.updateclient", + "vendor": "ohos", "version": { "code": 1, "name": "1.0" }, "apiVersion": { - "compatible": 4, - "target": 4, + "compatible": 8, + "target": 8, "releaseType": "Beta2" } }, "deviceConfig": {}, "module": { - "package": "com.runhe.ota.updateclient", + "package": "com.ohos.ota.updateclient", "name": ".MyApplication", "deviceType": [ "phone" @@ -37,7 +37,7 @@ ] } ], - "name": "com.runhe.ota.updateclient.MainAbility", + "name": "com.ohos.ota.updateclient.MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "updateclient", diff --git a/entry/src/main/js/default/pages/index/index.js b/entry/src/main/js/default/pages/index/index.js index 41c4d72aca6805b51afd341308866e33073fabc0..c3884258ffc023d29f882dfb26fe4e499ad1b1e8 100644 --- a/entry/src/main/js/default/pages/index/index.js +++ b/entry/src/main/js/default/pages/index/index.js @@ -13,17 +13,52 @@ * limitations under the License. */ -import prompt from '@system.prompt' -import app from '@system.app'; +import prompt from '@ohos.prompt' +import app from '@ohos.ability.featureAbility'; import client from '@ohos.update'; -const HAS_NEW_VERSION = 0; -const NO_NEW_VERSION = 1; -const UPDATE_STATE_DOWNLOAD_FAIL = 23 -const UPDATE_STATE_DOWNLOAD_SUCCESS = 24; -const UPDATE_STATE_VERIFY_FAIL = 31; -const UPDATE_STATE_VERIFY_SUCCESS = 32; -var temp=0; -const page= { + +const HAS_NEW_VERSION = 1; +const NO_NEW_VERSION = 0; +const STATUS_CHECK_SUCCESS = 12; +const PACKAGE_NAME = "com.ohos.ota.updateclient"; +const VENDOR = "public"; +const TAG = "OUC_DEMO "; +var EventId = { + EVENT_TASK_BASE: 0x01000000, + EVENT_TASK_RECEIVE: 0x01000001, + EVENT_TASK_CANCEL: 0x01000002, + EVENT_DOWNLOAD_WAIT: 0x01000003, + EVENT_DOWNLOAD_START: 0x01000004, + EVENT_PROGRESS_UPDATE: 0x01000005, + EVENT_DOWNLOAD_PAUSE: 0x01000006, + EVENT_DOWNLOAD_RESUME: 0x01000007, + EVENT_DOWNLOAD_SUCCESS: 0x01000008, + EVENT_DOWNLOAD_FAIL: 0x01000009, + EVENT_UPGRADE_WAIT: 0x01000010, + EVENT_UPGRADE_START: 0x01000011, + EVENT_UPGRADE_UPDATE: 0x01000012, + EVENT_APPLY_WAIT: 0x01000013, + EVENT_APPLY_START: 0x01000014, + EVENT_UPGRADE_SUCCESS: 0x01000015, + EVENT_UPGRADE_FAIL: 0x01000016 +} +let upgradeInfo = { + upgradeApp: PACKAGE_NAME, + businessType: { + vendor: VENDOR, + subType: 1 + } +} +let eventClassifyInfo = { + eventClassify: EventId.EVENT_TASK_BASE, + extraInfo: "" +} +var temp = 0; +let versionDigestInfo; +let pauseDownloadOptions = { + isAllowAutoResume: false +} +const page = { data: { title: "当前版本:10.2.1", button: "查看更新", @@ -37,29 +72,31 @@ const page= { showBanner: "", showButton: "download", upgradeInfo: "", - updater: undefined, + updater: Object(), timer: undefined, - dialog:"", - showSimpledialog:"" + dialog: "", + showSimpledialog: "" }, onInit() { + console.info(TAG + "onInit") try { - page.data.updater = client.getUpdater('/data/updater/updater.zip', 'OTA'); + page.data.updater = client.getOnlineUpdater(upgradeInfo); page.getCurrVersion(); - } catch(error) { + } catch (error) { + console.error(TAG + "onInit error: " + JSON.stringify(error)); } }, - onClick: function() { + onClick: function () { if (page.data.pageType == "currVersion") { // 检查更新版本 page.data.pageType = "checkVersion"; page.data.button = "取消查看"; page.data.showLoad = "load"; page.checkNewVersion(); - } else if (page.data.pageType == "newVersion") { // 当前需要下载最新的版本 + } else if (page.data.pageType == "newVersion") { // 当前需要下载最新的版本 page.data.pageType = "downVersion"; page.data.showLoad = "load"; page.data.showBanner = 'banner'; - page.data.button = "取消下载"; + page.data.button = "暂停下载"; if (page.data.updater == undefined) { page.data.pageType = "errorPage"; page.data.showButton = 'download'; @@ -68,51 +105,54 @@ const page= { return; } this.download() - } else if ( this.pageType == "lastVersion") { // 已经是最新的版本了,单击后退出页面 + } else if (this.pageType == "lastVersion") { // 已经是最新的版本了,单击后退出页面 page.data.showLoad = ""; - app.terminate(); + app.terminateSelf(); } else if (page.data.pageType == "checkVersion") { // 检查中,取消检查 - page.data.showSimpledialog="simpledialog"; + page.data.showSimpledialog = "simpledialog"; this.$element('simpledialog').show(); - page.data.dialog="是否取消检查"; + page.data.dialog = "是否取消检查"; } else if (page.data.pageType == "downVersion") { // 下载中,取消下载 - page.data.showSimpledialog="simpledialog"; - page.data.dialog="是否取消下载"; + page.data.showSimpledialog = "simpledialog"; + page.data.dialog = "是否暂停下载!"; this.$element('simpledialog').show(); - temp=1; + temp = 1; } else if (page.data.pageType == "errorPage") { // 出错,退出 - app.terminate(); + app.terminateSelf(); } }, download() { - page.data.updater.on("downloadProgress", progress => { + console.info(TAG + "download"); + page.data.updater.on(eventClassifyInfo, eventInfo => { + console.info(TAG + "download eventInfo: " + JSON.stringify(eventInfo)) if (page.data.pageType != "downVersion") { return; } + let progress = { + status: eventInfo.taskBody?.status, + percent: eventInfo.taskBody?.progress, + endReason: eventInfo.taskBody?.errorMessages?.[0]?.errorCode?.toString() + } let percent = progress.percent; if (progress.percent > 5) { percent = progress.percent - 5; - }else if(progress.percent>90){ + } else if (progress.percent > 90) { percent = 90; } page.data.width = percent + '%'; if (progress.percent == 100) { page.data.showLoad = ""; page.data.showBanner = ''; - if(temp==1){ + if (temp == 1) { this.$element('simpledialog').close(); } - } // 下载成功 UpdateState.UPDATE_STATE_DOWNLOAD_SUCCESS - if (progress.status == UPDATE_STATE_DOWNLOAD_SUCCESS || - progress.status == UPDATE_STATE_VERIFY_SUCCESS) { + if (eventInfo.eventId == EventId.EVENT_DOWNLOAD_SUCCESS) { page.data.pageType = "downSuccess"; page.data.showButton = "upgrade"; - page.data.upgradeInfo = page.data.versionName + "安装包下载完成,是否安装?"; - page.data.updater.off("downloadProgress"); - } else if (progress.status == UPDATE_STATE_DOWNLOAD_FAIL || - progress.status == UPDATE_STATE_VERIFY_FAIL) { // 失败 + page.data.upgradeInfo = page.data.versionName + "安装包下载完成,是否安装?"; + } else if (eventInfo.eventId == EventId.EVENT_DOWNLOAD_FAIL) { // 失败 page.data.pageType = "errorPage"; page.data.showButton = 'download'; page.data.button = '退出'; @@ -120,26 +160,34 @@ const page= { if (progress.endReason) { page.data.title = "下载失败,失败原因:" + progress.endReason; } - page.data.updater.off("downloadProgress"); } }); - page.data.updater.download(); + let downloadOptions = { + allowNetwork: 1, + order: 1 + } + page.data.updater.download(versionDigestInfo, downloadOptions).then(result => { + console.info(TAG + "download result: " + JSON.stringify(result)); + }).catch(err => { + console.error(TAG + "download err: " + JSON.stringify(err)); + }); }, - clickInstall: function() { + clickInstall: function () { if (page.data.pageType == "downSuccess") { // 下载成功,开始升级 page.upgrade(); } }, - clickCancel: function() { + clickCancel: function () { if (page.data.pageType == "downSuccess") { // 下载成功,取消升级 - page.data.showSimpledialog="simpledialog"; - page.data.dialog="是否稍后安装"; + page.data.showSimpledialog = "simpledialog"; + page.data.dialog = "是否稍后安装"; this.$element('simpledialog').show(); } }, getCurrVersion() { + console.info(TAG + "getCurrVersion"); if (page.data.updater == undefined) { page.data.pageType = "errorPage"; page.data.showButton = 'download'; @@ -147,28 +195,65 @@ const page= { page.data.title = "初始化出现错误,退出app"; return; } - try { - // 获取版本信息 - page.data.updater.getNewVersionInfo(function(err, info) { - if (info.status == NO_NEW_VERSION) { // 已经最新 - page.data.title = "当前已经是最新版本"; - page.data.button = "确定"; - page.data.pageType = "lastVersion"; - page.data.versionName = info.checkResults[0].versionName; - } else if (info.status == HAS_NEW_VERSION) { - page.data.button = "查看更新"; - page.data.pageType = "currVersion"; - page.data.versionName = info.checkResults[0].versionName; - } else { - page.data.title = "获取新版本失败"; - } - }); - } catch(error) { - page.data.title = "获取新版本失败"; - } + + // 获取版本信息 + page.data.updater.getTaskInfo().then(taskInfo => { + console.info(TAG + "getTaskInfo result: " + JSON.stringify(taskInfo)); + let taskStatus = taskInfo?.taskBody?.status; + if (taskStatus < STATUS_CHECK_SUCCESS) { + this.checkNewVersionLocal(); + } else { + this.getNewVersionInfoLocal(); + } + }); + }, + + checkNewVersionLocal() { + page.data.updater.checkNewVersion().then(data => { + console.info(TAG + "checkNewVersion result: " + JSON.stringify(data)); + if (data.isExistNewVersion == NO_NEW_VERSION) { // 已经最新 + page.data.title = "当前已经是最新版本"; + page.data.button = "确定"; + page.data.pageType = "lastVersion"; + page.data.versionName = data?.newVersionInfo?.versionComponents?.[0]?.displayVersion; + } else if (data.isExistNewVersion == HAS_NEW_VERSION) { + page.data.button = "查看更新"; + page.data.pageType = "currVersion"; + page.data.versionName = data?.newVersionInfo?.versionComponents?.[0]?.displayVersion; + } else { + page.data.title = "获取新版本失败"; + } + }).catch(error => { + console.info(TAG + "checkNewVersion error: " + JSON.stringify(error)); + page.data.pageType = "errorPage"; + page.data.showButton = 'download'; + page.data.button = '退出'; + page.data.title = "检查新版本失败"; + if (error.errorNum) { + page.data.title = "检查新版本失败,失败原因:" + error.errorNum; + } + }); }, - checkNewVersion: function() { + getNewVersionInfoLocal() { + page.data.updater.getNewVersionInfo().then(data => { + console.info(TAG + "getNewVersionInfo result: " + JSON.stringify(data)); + page.data.button = "查看更新"; + page.data.pageType = "currVersion"; + page.data.versionName = data?.versionComponents?.[0]?.displayVersion; + }).catch(error => { + console.info(TAG + "getNewVersionInfo error: " + JSON.stringify(error)); + page.data.pageType = "errorPage"; + page.data.showButton = 'download'; + page.data.button = '退出'; + page.data.title = "检查新版本失败"; + if (error.errorNum) { + page.data.title = "检查新版本失败,失败原因:" + error.errorNum; + } + }); + }, + + checkNewVersion: function () { if (page.data.updater == undefined) { page.data.pageType = "errorPage"; page.data.showButton = 'download'; @@ -176,53 +261,62 @@ const page= { page.data.title = "初始化出现错误,退出app"; return; } - page.data.updater.checkNewVersion(function(err, info) { + console.info(TAG + "checkNewVersion"); + page.data.updater.getNewVersionInfo().then(info => { + console.info(TAG + "checkNewVersion getNewVersionInfo: " + JSON.stringify(info)); + versionDigestInfo = info?.versionDigestInfo; page.data.showLoad = ""; - if (info.status == NO_NEW_VERSION) { // 已经最新 - page.data.title = "当前已经是最新版本"; - page.data.button = "确定"; - page.data.pageType = "lastVersion"; - } else if (info.status == HAS_NEW_VERSION) { // 有新版本 - let size = info.checkResults[0].size / 1024 / 1024; - page.data.versionName = info.checkResults[0].versionName; - page.data.size = String(size.toFixed(2)) + "MB"; - if (info.descriptionInfo[0].content != undefined) { - page.data.journal = info.descriptionInfo[0].content; - }; - page.data.pageType = "newVersion"; - page.data.button = "下载更新包"; - } else { // 出错 - page.data.pageType = "errorPage"; - page.data.showButton = 'download'; - page.data.button = '退出'; - page.data.title = "检查新版本失败"; - if (info.errMsg) { - page.data.title = "检查新版本失败,失败原因:" + info.errMsg; - } + let size = info?.versionComponents?.[0]?.size / 1024 / 1024; + page.data.versionName = info?.versionComponents?.[0]?.displayVersion; + page.data.size = String(size.toFixed(2)) + "MB"; + if (info?.versionComponents?.[0]?.descriptionInfo?.content != undefined) { + page.data.journal = info?.versionComponents?.[0]?.descriptionInfo?.content; + } + page.data.pageType = "newVersion"; + page.data.button = "下载更新包"; + }).catch(error => { + page.data.pageType = "errorPage"; + page.data.showButton = 'download'; + page.data.button = '退出'; + page.data.title = "检查新版本失败"; + if (error.errorNum) { + page.data.title = "检查新版本失败,失败原因:" + error.errorNum; } }); }, upgrade() { - if ( page.data.updater == undefined) { + if (page.data.updater == undefined) { page.data.pageType = "errorPage"; page.data.showButton = 'download'; page.data.button = '退出'; page.data.title = "初始化出现错误,退出app"; return; } - page.data.updater.on("upgradeProgress", progress => { + page.data.updater.on(eventClassifyInfo, eventInfo => { + console.info(TAG + "upgrade eventInfo: " + JSON.stringify(eventInfo)); + let progress = { + status: eventInfo.taskBody?.status, + percent: eventInfo.taskBody?.progress, + endReason: eventInfo.taskBody?.errorMessages?.[0]?.errorCode?.toString() + } page.data.width = progress.percent + '%'; - if (progress.status == 3) { // 失败 - page.data.updater.off("upgradeProgress"); + if (progress.status == EventId.EVENT_UPGRADE_FAIL) { // 失败 page.data.showLoad = ""; page.data.pageType = "errorPage"; page.data.showButton = 'download'; page.data.button = '退出'; - page.data.title = "升级失败,失败原因:" + progress.endReason ; + page.data.title = "升级失败,失败原因:" + progress.endReason; } }); - page.data.updater.upgrade(); + let upgradeOptions = { + order: 2 + } + page.data.updater.upgrade(versionDigestInfo, upgradeOptions).then(result => { + console.info(TAG + "upgrade result: " + JSON.stringify(result)); + }).catch(err => { + console.error(TAG + "upgrade err: " + JSON.stringify(err)); + }); }, closeDialog() { @@ -245,24 +339,23 @@ const page= { prompt.showToast({ message: '确定成功' }) - if (page.data.pageType == "downVersion"){ - page.data.updater.cancel(); + if (page.data.pageType == "downVersion") { page.data.showLoad = ""; page.data.showBanner = ''; page.data.pageType = "newVersion"; page.data.button = "下载更新包"; - }else if(page.data.pageType =="downSuccess"){ + page.data.updater.pauseDownload(versionDigestInfo, pauseDownloadOptions); + } else if (page.data.pageType == "downSuccess") { page.data.upgradeInfo = ""; page.data.showButton = 'download'; page.data.button = "查看更新"; page.data.pageType = "currVersion"; page.getCurrVersion(); - }else if(page.data.pageType =="checkVersion"){ + } else if (page.data.pageType == "checkVersion") { page.data.button = "检查更新"; page.getCurrVersion(); } - } } -export default page; +export default page; \ No newline at end of file