diff --git a/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.css b/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.css index e613fd8832e46e7f313ea216b7b405621d450d7c..e52d4fe10882a6471eb88ada6270aa487b0bd5f3 100644 --- a/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.css +++ b/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.css @@ -14,6 +14,8 @@ */ .container { + width: 100%; + height: 100%; flex-direction: column; justify-content: space-between; align-items: center; @@ -59,6 +61,7 @@ } .timer { + width: 100%; flex-direction: row; justify-content: space-between; margin-bottom: 12px; diff --git a/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.js b/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.js index 088e8f587f90337f8f4960855eb2a6b7ed82a94b..31fd2ffcfce7409de94d8f5ca0249c3dcd95ca10 100644 --- a/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.js +++ b/ability/JsDistributedMusicPlayer/entry/src/main/js/default/pages/index/index.js @@ -13,7 +13,7 @@ * limitations under the License. */ -import featureAbility from '@ohos.ability.featureability'; +import featureAbility from '@ohos.ability.featureAbility'; import RemoteDeviceModel from '../../../model/RemoteDeviceModel.js'; import PlayerModel from '../../../model/PlayerModel.js'; import KvStoreModel from '../../../model/KvStoreModel.js'; @@ -209,13 +209,18 @@ export default { } }, onContinueAbilityClick() { - console.info('MusicPlayer[IndexPage] onContinueAbilityClick'); + console.info('MusicPlayer[IndexPage] onContinueAbilityClick begin'); let self = this; this.remoteDeviceModel.registerDeviceListCallback(() => { console.info('MusicPlayer[IndexPage] registerDeviceListCallback, callback entered'); var list = []; list[0] = DEVICE_LIST_LOCALHOST; - var deviceList = self.remoteDeviceModel.deviceList; + var deviceList; + if (self.remoteDeviceModel.discoverList != null) { + deviceList = self.remoteDeviceModel.discoverList; + } else { + deviceList = self.remoteDeviceModel.deviceList; + } console.info('MusicPlayer[IndexPage] on remote device updated, count=' + deviceList.length); for (var i = 0; i < deviceList.length; i++) { console.info('MusicPlayer[IndexPage] device ' + i + '/' + deviceList.length + ' deviceId=' @@ -230,6 +235,7 @@ export default { }); this.$element('continueAbilityDialog').show(); this.isDialogShowing = true; + console.info('MusicPlayer[IndexPage] onContinueAbilityClick end'); }, startAbilityContinuation(deviceId, deviceName) { this.$element('continueAbilityDialog').close(); @@ -256,13 +262,17 @@ export default { parameters: params }; var timerId = setTimeout(() => { - console.info('MusicPlayer[IndexPage] onMessageReceiveTimeout, terminateAbility'); - featureAbility.terminateAbility(); + console.info('MusicPlayer[IndexPage] onMessageReceiveTimeout, terminateSelf'); + featureAbility.terminateSelf((error) => { + console.info('MusicPlayer[IndexPage] terminateSelf finished, error=' + error); + }); }, 3000); this.kvStoreModel.setOnMessageReceivedListener(REMOTE_ABILITY_STARTED, () => { - console.info('MusicPlayer[IndexPage] OnMessageReceived, terminateAbility'); + console.info('MusicPlayer[IndexPage] OnMessageReceived, terminateSelf'); clearTimeout(timerId); - featureAbility.terminateAbility(); + featureAbility.terminateSelf((error) => { + console.info('MusicPlayer[IndexPage] terminateSelf finished, error=' + error); + }); }); featureAbility.startAbility({ want: wantValue @@ -279,12 +289,35 @@ export default { this.$element('continueAbilityDialog').close(); return; } - let self = this; - for (var i = 0; i < this.deviceList.length; i++) { - if (this.deviceList[i].id === e.value) { - this.startAbilityContinuation(this.deviceList[i].id, this.deviceList[i].name); + var name = null; + if (this.remoteDeviceModel.discoverList != null) { + for (var i = 0; i < this.remoteDeviceModel.discoverList.length; i++) { + if (this.remoteDeviceModel.discoverList[i].deviceId === e.value) { + name = this.remoteDeviceModel.discoverList[i].deviceName; + break; + } + } + } + if (name == null) { + console.error('MusicPlayer[IndexPage] onRadioChange failed, can not get name from discoverList'); + return; + } + console.info('MusicPlayer[IndexPage] onRadioChange name=' + name); + for (i = 0; i < this.remoteDeviceModel.deviceList.length; i++) { + if (this.remoteDeviceModel.deviceList[i].deviceName === name) { + this.startAbilityContinuation(this.remoteDeviceModel.deviceList[i].deviceId, this.remoteDeviceModel.deviceList[i].deviceName); + return; } } + let self = this; + this.remoteDeviceModel.authDevice(e.value, () => { + console.info('MusicPlayer[IndexPage] auth and online finished'); + for (i = 0; i < self.remoteDeviceModel.deviceList.length; i++) { + if (self.remoteDeviceModel.deviceList[i].deviceName === name) { + this.startAbilityContinuation(self.remoteDeviceModel.deviceList[i].deviceId, self.remoteDeviceModel.deviceList[i].deviceName); + } + } + }); } }, cancelDialog(e) { diff --git a/ability/JsDistributedMusicPlayer/entry/src/main/js/model/RemoteDeviceModel.js b/ability/JsDistributedMusicPlayer/entry/src/main/js/model/RemoteDeviceModel.js index 411266e00379dc98fd08b2e11823a79b1e54c334..ade02feabe76f4947280e6a11279974dd5882c58 100644 --- a/ability/JsDistributedMusicPlayer/entry/src/main/js/model/RemoteDeviceModel.js +++ b/ability/JsDistributedMusicPlayer/entry/src/main/js/model/RemoteDeviceModel.js @@ -19,7 +19,9 @@ var SUBSCRIBE_ID = 100; export default class RemoteDeviceModel { deviceList = []; + discoverList = []; callback; + authCallback = null; #deviceManager; constructor() { @@ -67,35 +69,39 @@ export default class RemoteDeviceModel { console.info('MusicPlayer[RemoteDeviceModel] deviceStateChange data=' + JSON.stringify(data)); switch (data.action) { case 0: - self.deviceList[self.deviceList.length] = data.device; - console.info('MusicPlayer[RemoteDeviceModel] online, updated device list=' + JSON.stringify(self.deviceList)); - self.callback(); - break; + self.deviceList[self.deviceList.length] = data.device; + console.info('MusicPlayer[RemoteDeviceModel] online, updated device list=' + JSON.stringify(self.deviceList)); + self.callback(); + if (self.authCallback != null) { + self.authCallback(); + self.authCallback = null; + } + break; case 2: - if (self.deviceList.length > 0) { - for (var i = 0; i < self.deviceList.length; i++) { - if (self.deviceList[i].deviceId === data.device.deviceId) { - self.deviceList[i] = data.device; - break; - } + if (self.deviceList.length > 0) { + for (var i = 0; i < self.deviceList.length; i++) { + if (self.deviceList[i].deviceId === data.device.deviceId) { + self.deviceList[i] = data.device; + break; } } - console.info('MusicPlayer[RemoteDeviceModel] change, updated device list=' + JSON.stringify(self.deviceList)); - self.callback(); - break; + } + console.info('MusicPlayer[RemoteDeviceModel] change, updated device list=' + JSON.stringify(self.deviceList)); + self.callback(); + break; case 1: - if (self.deviceList.length > 0) { - var list = []; - for (var i = 0; i < self.deviceList.length; i++) { - if (self.deviceList[i].deviceId != data.device.deviceId) { - list[i] = data.device; - } + if (self.deviceList.length > 0) { + var list = []; + for (var i = 0; i < self.deviceList.length; i++) { + if (self.deviceList[i].deviceId != data.device.deviceId) { + list[i] = data.device; } - self.deviceList = list; } - console.info('MusicPlayer[RemoteDeviceModel] offline, updated device list=' + JSON.stringify(data.device)); - self.callback(); - break; + self.deviceList = list; + } + console.info('MusicPlayer[RemoteDeviceModel] offline, updated device list=' + JSON.stringify(data.device)); + self.callback(); + break; default: break; } @@ -110,16 +116,12 @@ export default class RemoteDeviceModel { return; } } - - console.info('MusicPlayer[RemoteDeviceModel] authenticateDevice ' + JSON.stringify(data.device)); - self.#deviceManager.authenticateDevice(data.device); + self.discoverList[self.discoverList.length] = data.device; + self.callback(); }); this.#deviceManager.on('discoverFail', (data) => { console.info('MusicPlayer[RemoteDeviceModel] discoverFail data=' + JSON.stringify(data)); }); - this.#deviceManager.on('authResult', (data) => { - console.info('MusicPlayer[RemoteDeviceModel] authResult data=' + JSON.stringify(data)); - }); this.#deviceManager.on('serviceDie', () => { console.error('MusicPlayer[RemoteDeviceModel] serviceDie'); }); @@ -138,13 +140,44 @@ export default class RemoteDeviceModel { this.#deviceManager.startDeviceDiscovery(info); } + authDevice(deviceId, callback) { + console.info('MusicPlayer[RemoteDeviceModel] authDevice ' + deviceId); + for (var i = 0; i < this.discoverList.length; i++) { + if (this.discoverList[i].deviceId === deviceId) { + console.info('MusicPlayer[RemoteDeviceModel] device founded, ignored'); + let extraInfo = { + "targetPkgName": 'com.ohos.distributedmusicplayer', + "appName": 'Music', + "appDescription": 'Music player application', + "business": '0' + }; + let authParam = { + "authType": 1, + "appIcon": '', + "appThumbnail": '', + "extraInfo": extraInfo + }; + console.info('MusicPlayer[RemoteDeviceModel] authenticateDevice ' + JSON.stringify(this.discoverList[i])); + let self = this; + this.#deviceManager.authenticateDevice(this.discoverList[i], authParam, (err, data) => { + if (err) { + console.info('MusicPlayer[RemoteDeviceModel] authenticateDevice failed, err=' + JSON.stringify(err)); + self.authCallback = null; + } else { + console.info('MusicPlayer[RemoteDeviceModel] authenticateDevice succeed, data=' + JSON.stringify(data)); + self.authCallback = callback; + } + }); + } + } + } + unregisterDeviceListCallback() { console.info('MusicPlayer[RemoteDeviceModel] stopDeviceDiscovery ' + SUBSCRIBE_ID); this.#deviceManager.stopDeviceDiscovery(SUBSCRIBE_ID); this.#deviceManager.off('deviceStateChange'); this.#deviceManager.off('deviceFound'); this.#deviceManager.off('discoverFail'); - this.#deviceManager.off('authResult'); this.#deviceManager.off('serviceDie'); this.deviceList = []; }