diff --git a/device/eTSDeviceManager/README_zh.md b/device/eTSDeviceManager/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..7b6ed4584ea82bbd4f32924ba9eab88fccff19c3 --- /dev/null +++ b/device/eTSDeviceManager/README_zh.md @@ -0,0 +1,21 @@ +# 设备管理-DeviceManager接口 + + + +### 简介 + +本示例展示了在eTS中DeviceManager接口的使用,包括获取授信设备列表,设备扫描,设备认证,设备状态订阅。 + +### 使用说明 + +1、进入应用会自动获取授信设备列表显示在设备列表中,状态显示为"online",并开始设备扫描发现设备,发现设备后会显示在设备列表中,状态显示为"discover"。 + +2、点击状态为"discover"的设备,会触发认证,认证完成会刷新界面。 + +3、设备状态订阅会监听组网状态变化从而刷新界面。 + +### 约束与限制 + +1、本示例需要组网测试。 + +2、本示例仅支持标准系统上运行。 diff --git a/device/eTSDeviceManager/build.gradle b/device/eTSDeviceManager/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..f1b1a556a0c09953268d32e7da54b1e1ba664bac --- /dev/null +++ b/device/eTSDeviceManager/build.gradle @@ -0,0 +1,34 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.huawei.ohos.app' + +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 8 + supportSystem "standard" +} + +buildscript { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + } + dependencies { + classpath 'com.huawei.ohos:hap:3.0.5.2' + classpath 'com.huawei.ohos:decctest:1.2.7.2' + } +} + +allprojects { + repositories { + maven { + url 'https://repo.huaweicloud.com/repository/maven/' + } + maven { + url 'https://developer.huawei.com/repo/' + } + } +} diff --git a/device/eTSDeviceManager/entry/build.gradle b/device/eTSDeviceManager/entry/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..cef7b37de8f320938458ca42edde1462669836d2 --- /dev/null +++ b/device/eTSDeviceManager/entry/build.gradle @@ -0,0 +1,21 @@ +apply plugin: 'com.huawei.ohos.hap' +//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 +ohos { + compileSdkVersion 8 + defaultConfig { + compatibleSdkVersion 7 + } + buildTypes { + release { + proguardOpt { + proguardEnabled false + rulesFiles 'proguard-rules.pro' + } + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) + testImplementation 'junit:junit:4.13.1' +} diff --git a/device/eTSDeviceManager/entry/src/main/config.json b/device/eTSDeviceManager/entry/src/main/config.json new file mode 100644 index 0000000000000000000000000000000000000000..fd977cb306ee3613d84cba018ddf08caadfc8210 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/config.json @@ -0,0 +1,67 @@ +{ + "app": { + "bundleName": "ohos.samples.etsdevicemanager", + "vendor": "samples", + "version": { + "code": 1000000, + "name": "1.0.0" + } + }, + "deviceConfig": {}, + "module": { + "package": "ohos.samples.etsdevicemanager", + "name": ".MyApplication", + "mainAbility": ".MainAbility", + "srcPath": "", + "deviceType": [ + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry", + "installationFree": false + }, + "abilities": [ + { + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "orientation": "unspecified", + "visible": true, + "srcPath": "MainAbility", + "name": ".MainAbility", + "srcLanguage": "ets", + "icon": "$media:icon", + "description": "$string:description_mainability", + "formsEnabled": false, + "label": "$string:app_name", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/index" + ], + "name": ".MainAbility", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/app.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/app.ets new file mode 100644 index 0000000000000000000000000000000000000000..58946d00c628e0bba577551f68471b8dae55f5f8 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/app.ets @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default { + onCreate() { + console.info('Application onCreate') + }, + onDestroy() { + console.info('Application onDestroy') + }, +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/components/deviceView.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/components/deviceView.ets new file mode 100644 index 0000000000000000000000000000000000000000..6e911653c12cb3d98f05fb564c9bf65083e5f7fb --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/components/deviceView.ets @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DeviceDataModel } from '../model/deviceDataModel' + +@Component +export struct DeviceView { + private device: DeviceDataModel = null + + build() { + Column() { + Row() { + Text($r('app.string.device_name')) + .fontColor(Color.Black) + .fontSize(20) + .width(130) + Text(this.device.deviceName) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + }.width('100%') + + Row() { + Text($r('app.string.device_id')) + .fontColor(Color.Black) + .fontSize(20) + .width(130) + Text(this.device.deviceId) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + }.width('100%') + + Row() { + Text($r('app.string.device_state')) + .fontColor(Color.Black) + .fontSize(20) + .width(130) + Text(this.device.state) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(1) + } + .width('100%') + } + .padding(10) + } +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceDataModel.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceDataModel.ets new file mode 100644 index 0000000000000000000000000000000000000000..403bff8cb208f3521bf3d6abe22c54a981700866 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceDataModel.ets @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class DeviceDataModel { + deviceId: string + deviceName: string + deviceType: number + state: string + + constructor(deviceId: string, deviceName: string, deviceType: number, state: string) { + this.deviceId = deviceId + this.deviceName = deviceName + this.deviceType = deviceType + this.state = state + } +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceStateAction.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceStateAction.ets new file mode 100644 index 0000000000000000000000000000000000000000..8aa0b75a6768dbabc1bd61edb3b36e980934219e --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/deviceStateAction.ets @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export enum DeviceStateChangeAction { + /** + * device online action + */ + ONLINE = 0, + + /** + * device ready action, the device information synchronization was completed. + */ + READY = 1, + + /** + * device offline action + */ + OFFLINE = 2, + + /** + * device change action + */ + CHANGE = 3 +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/remoteDeviceModel.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/remoteDeviceModel.ets new file mode 100644 index 0000000000000000000000000000000000000000..984ca301af1fdc74df87dff61b7decf3eb711770 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/model/remoteDeviceModel.ets @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import deviceManager from '@ohos.distributedHardware.deviceManager' +import { DeviceStateChangeAction } from '../model/deviceStateAction' + +let SUBSCRIBE_ID = 100 + +export class RemoteDeviceModel { + deviceList = [] + discoverList = [] + callback + authCallback + deviceManager + + constructor() { + } + + registerDeviceListCallback(callback) { + if (typeof (this.deviceManager) != 'undefined') { + this.registerDeviceListCallbackImplement(callback) + return + } + console.log('[DeviceMnager.RemoteDeviceModel] deviceManager.createDeviceManager begin') + let self = this + deviceManager.createDeviceManager('ohos.samples.etsdevicemanager', (error, value) => { + if (error) { + console.error('[DeviceMnager.RemoteDeviceModel] createDeviceManager failed.') + return; + } + self.deviceManager = value + self.registerDeviceListCallbackImplement(callback) + console.log('[DeviceMnager.RemoteDeviceModel] createDeviceManager callback returned, error=' + error + ' value=' + value) + }); + console.log('[DeviceMnager.RemoteDeviceModel] deviceManager.createDeviceManager end') + } + + deviceStateChangeActionOnline(device) { + this.deviceList[this.deviceList.length] = device + console.info('[DeviceMnager.RemoteDeviceModel] online, device list=' + JSON.stringify(this.deviceList)) + if (this.authCallback != null) { + this.authCallback() + this.authCallback = null + } + this.callback() + } + + deviceStateChangeActionOffline(device) { + console.info('[DeviceMnager.RemoteDeviceModel] offline, this.deviceList.length=' + this.deviceList.length) + let list = [] + for (let i = 0; i < this.deviceList.length; i++) { + if (this.deviceList[i].deviceId !== device.deviceId) { + list.push(device) + } + } + this.deviceList = list + console.info('[DeviceMnager.RemoteDeviceModel] offline, device list=' + JSON.stringify(this.deviceList)) + this.callback() + } + + deviceStateChangeActionReady(device) { + if (this.deviceList.length <= 0) { + this.deviceList[this.deviceList.length] = device + this.callback() + return + } + for (let j = 0; j < this.deviceList.length; j++) { + if (this.deviceList[j].deviceId === device.deviceId) { + this.deviceList[j] = device + break + } + } + console.info('[DeviceMnager.RemoteDeviceModel] ready, device list=' + JSON.stringify(this.deviceList)) + this.callback() + } + + registerDeviceListCallbackImplement(callback) { + console.info('[DeviceMnager.RemoteDeviceModel] registerDeviceListCallback') + this.callback = callback + if (this.deviceManager === undefined) { + console.error('[DeviceMnager.RemoteDeviceModel] deviceManager has not initialized') + this.callback() + return + } + console.info('[DeviceMnager.RemoteDeviceModel] getTrustedDeviceListSync begin') + let list = this.deviceManager.getTrustedDeviceListSync() + console.info('[DeviceMnager.RemoteDeviceModel] getTrustedDeviceListSync end, deviceList=' + JSON.stringify(list)) + if (typeof (list) != 'undefined' && typeof (list.length) != 'undefined') { + this.deviceList = list + } + this.callback() + console.info('[DeviceMnager.RemoteDeviceModel] callback finished'); + let self = this; + this.deviceManager.on('deviceStateChange', (data) => { + if (data == null) { + return + } + console.info('[DeviceMnager.RemoteDeviceModel] deviceStateChange data=' + JSON.stringify(data)) + switch (data.action) { + case DeviceStateChangeAction.ONLINE: + console.info('[DeviceMnager.RemoteDeviceModel] deviceStateChange ONLINE'); + self.deviceStateChangeActionOnline(data.device) + break; + case DeviceStateChangeAction.READY: + console.info('[DeviceMnager.RemoteDeviceModel] deviceStateChange READY'); + self.deviceStateChangeActionReady(data.device) + break; + case DeviceStateChangeAction.OFFLINE: + console.info('[DeviceMnager.RemoteDeviceModel] deviceStateChange OFFLINE'); + self.deviceStateChangeActionOffline(data.device) + break + case DeviceStateChangeAction.CHANGE: + break + default: + break + } + }); + this.deviceManager.on('deviceFound', (data) => { + if (data == null) { + return + } + console.info('[DeviceMnager.RemoteDeviceModel] deviceFound data=' + JSON.stringify(data)) + self.deviceFound(data) + }); + this.deviceManager.on('discoverFail', (data) => { + console.info('[DeviceMnager.RemoteDeviceModel] discoverFail data=' + JSON.stringify(data)) + }); + this.deviceManager.on('serviceDie', () => { + console.error('[DeviceMnager.RemoteDeviceModel] serviceDie') + }); + this.startDeviceDiscovery() + } + + deviceFound(data) { + for (var i = 0;i < this.discoverList.length; i++) { + if (this.discoverList[i].deviceId == data.device.deviceId) { + console.info('[DeviceMnager.RemoteDeviceModel] device founded ignored') + return + } + } + this.discoverList[this.discoverList.length] = data.device + console.info('[DeviceMnager.RemoteDeviceModel] deviceFound self.discoverList=' + this.discoverList) + this.callback(); + } + + startDeviceDiscovery() { + SUBSCRIBE_ID = Math.floor(65536 * Math.random()) + var info = { + subscribeId: SUBSCRIBE_ID, + mode: 0xAA, + medium: 2, + freq: 2, + isSameAccount: false, + isWakeRemote: true, + capability: 0 + }; + console.info('[DeviceMnager.RemoteDeviceModel] startDeviceDiscovery ' + SUBSCRIBE_ID) + this.deviceManager.startDeviceDiscovery(info) + } + + unregisterDeviceListCallback() { + console.info('[DeviceMnager.RemoteDeviceModel] stopDeviceDiscovery ' + SUBSCRIBE_ID) + this.deviceManager.stopDeviceDiscovery(SUBSCRIBE_ID); + this.deviceManager.off('deviceStateChange') + this.deviceManager.off('deviceFound') + this.deviceManager.off('discoverFail') + this.deviceManager.off('serviceDie') + this.deviceList = [] + this.discoverList = [] + } + + authenticateDevice(device, callBack) { + console.info('[DeviceMnager.RemoteDeviceModel] authenticateDevice ' + JSON.stringify(device)); + for (let i = 0; i < this.discoverList.length; i++) { + if (this.discoverList[i].deviceId != device.deviceId) { + continue + } + let extraInfo = { + 'targetPkgName': 'ohos.samples.etsdevicemanager', + 'appName': 'eTSDeviceManger', + 'appDescription': 'eTSDeviceManger Ability', + 'business': '0' + } + let authParam = { + 'authType': 1, + 'appIcon': '', + 'appThumbnail': '', + 'extraInfo': extraInfo + } + this.deviceManager.authenticateDevice(device, authParam, (err, data) => { + if (err) { + console.info('[DeviceMnager.RemoteDeviceModel] authenticateDevice error:' + JSON.stringify(err)) + this.authCallback = null + return + } + console.info('[DeviceMnager.RemoteDeviceModel] authenticateDevice succeed:' + JSON.stringify(data)) + this.authCallback = callBack + }) + } + } +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/ets/MainAbility/pages/index.ets b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/pages/index.ets new file mode 100644 index 0000000000000000000000000000000000000000..623776426bf438adb8b98890e8341c80155a14ed --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/ets/MainAbility/pages/index.ets @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DeviceView } from '../components/deviceView' +import { RemoteDeviceModel } from '../model/remoteDeviceModel' +import { DeviceDataModel } from '../model/deviceDataModel' + +@Entry +@Component +struct Index { + @State deviceList: Array = [] + private remoteDeviceModel: RemoteDeviceModel = new RemoteDeviceModel() + + refreshDevice() { + let self = this + this.remoteDeviceModel.registerDeviceListCallback(() => { + console.info('[DeviceMnager.IndexPage] registerDeviceListCallback, callback entered') + self.deviceList = [] + let deviceTempList = self.remoteDeviceModel.discoverList + for (var i = 0; i < deviceTempList.length; i++) { + console.info('[DeviceMnager.IndexPage] discoverList device ' + i + '/' + deviceTempList.length + + ' deviceId=' + deviceTempList[i].deviceId + ' deviceName=' + deviceTempList[i].deviceName + + ' deviceType=' + deviceTempList[i].deviceType) + self.deviceList.push({ + deviceId: deviceTempList[i].deviceId, + deviceName: deviceTempList[i].deviceName, + deviceType: deviceTempList[i].deviceType, + state: 'discover' + }) + } + deviceTempList = self.remoteDeviceModel.deviceList + for (var i = 0; i < deviceTempList.length; i++) { + console.info('[DeviceMnager.IndexPage] deviceList device ' + i + '/' + deviceTempList.length + + ' deviceId=' + deviceTempList[i].deviceId + ' deviceName=' + deviceTempList[i].deviceName + + ' deviceType=' + deviceTempList[i].deviceType) + self.deviceList.push({ + deviceId: deviceTempList[i].deviceId, + deviceName: deviceTempList[i].deviceName, + deviceType: deviceTempList[i].deviceType, + state: 'online' + }) + } + }) + } + + aboutToAppear() { + this.refreshDevice() + } + + build() { + Column() { + Row() { + Text($r("app.string.app_name")) + .fontColor(Color.White) + .fontSize(20) + } + .width('100%').height(50) + .padding({ left: 15 }) + .backgroundColor('#0D9FFB') + + List() { + ForEach(this.deviceList, (item, index) => { + ListItem() { + DeviceView({ device: item }) + } + .onClick(() => { + let self = this + if (item.state === 'discover') { + this.remoteDeviceModel.authenticateDevice(item, () => { + console.log('[DeviceMnager.IndexPage] auth and online finished') + self.deviceList[index].state = 'online' + }) + } + }) + }, item => JSON.stringify(item)) + } + .width('100%') + .layoutWeight(1) + .divider({ strokeWidth: 1, color: Color.Gray, startMargin: 10, endMargin: 10 }) + } + .width('100%').height('100%') + } +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/resources/base/element/string.json b/device/eTSDeviceManager/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..bb97964d977587fd51821eee12864fbd27e439b2 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "app_name", + "value": "eTSDeviceManger" + }, + { + "name": "description_mainability", + "value": "eTSDeviceManger Ability" + }, + { + "name": "refresh_device_list", + "value": "Refresh device list" + }, + { + "name": "device_name", + "value": "Device name:" + }, + { + "name": "device_id", + "value": "Device id:" + }, + { + "name": "device_state", + "value": "State:" + } + ] +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/resources/base/media/icon.png b/device/eTSDeviceManager/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/device/eTSDeviceManager/entry/src/main/resources/base/media/icon.png differ diff --git a/device/eTSDeviceManager/entry/src/main/resources/en/element/string.json b/device/eTSDeviceManager/entry/src/main/resources/en/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..bb97964d977587fd51821eee12864fbd27e439b2 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/resources/en/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "app_name", + "value": "eTSDeviceManger" + }, + { + "name": "description_mainability", + "value": "eTSDeviceManger Ability" + }, + { + "name": "refresh_device_list", + "value": "Refresh device list" + }, + { + "name": "device_name", + "value": "Device name:" + }, + { + "name": "device_id", + "value": "Device id:" + }, + { + "name": "device_state", + "value": "State:" + } + ] +} \ No newline at end of file diff --git a/device/eTSDeviceManager/entry/src/main/resources/zh/element/string.json b/device/eTSDeviceManager/entry/src/main/resources/zh/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..0e67a9fa843adbeeda68d1a959853b038cb963b2 --- /dev/null +++ b/device/eTSDeviceManager/entry/src/main/resources/zh/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "app_name", + "value": "eTSDeviceManger" + }, + { + "name": "description_mainability", + "value": "eTSDeviceManger Ability" + }, + { + "name": "refresh_device_list", + "value": "刷新设备列表" + }, + { + "name": "device_name", + "value": "设备名称:" + }, + { + "name": "device_id", + "value": "设备Id:" + }, + { + "name": "device_state", + "value": "状态:" + } + ] +} \ No newline at end of file diff --git a/device/eTSDeviceManager/screenshots/device/main.png b/device/eTSDeviceManager/screenshots/device/main.png new file mode 100644 index 0000000000000000000000000000000000000000..77b8d2af4355dfd9d06ce3d9b17bfd0d39e011f8 Binary files /dev/null and b/device/eTSDeviceManager/screenshots/device/main.png differ diff --git a/device/eTSDeviceManager/settings.gradle b/device/eTSDeviceManager/settings.gradle new file mode 100644 index 0000000000000000000000000000000000000000..4773db73233a570c2d0c01a22e75321acfbf7a07 --- /dev/null +++ b/device/eTSDeviceManager/settings.gradle @@ -0,0 +1 @@ +include ':entry'