Skip to content

Commit 71e5b4f

Browse files
committed
增加登录页面以及功能
1 parent 45d566f commit 71e5b4f

File tree

9 files changed

+982
-264
lines changed

9 files changed

+982
-264
lines changed

sdkdemo/src/main/AndroidManifest.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@
8383
android:configChanges="orientation|keyboardHidden|screenSize" />
8484
<activity android:name="com.tencent.iot.explorer.link.rtc.ui.audiocall.TRTCAudioCallActivity" />
8585
<activity android:name="com.tencent.iot.explorer.link.rtc.ui.videocall.TRTCVideoCallActivity" />
86-
<activity android:name=".core.activity.LoginActivity" />
87-
<activity android:name=".ModuleActivity">
86+
<!-- <activity android:name=".core.activity.LoginActivity" />-->
87+
<activity android:name=".core.activity.LoginActivity">
8888
<intent-filter>
8989
<action android:name="android.intent.action.MAIN" />
9090

@@ -110,6 +110,7 @@
110110
android:name="${applicationId}.wxapi.WXEntryActivity"
111111
android:exported="true"
112112
android:targetActivity=".core.wxapi.WXEntryActivity" /> <!-- picture start -->
113+
<activity android:name=".core.activity.EnhancedDeviceListActivity"/>
113114
</application>
114115

115116
</manifest>
Lines changed: 232 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,279 @@
11
package com.tencent.iot.explorer.link.demo.core.activity
22

33
import android.Manifest
4+
import android.content.Intent
5+
import android.content.pm.PackageManager
6+
import android.os.Bundle
47
import android.text.TextUtils
5-
import com.tencent.iot.explorer.link.core.auth.IoTAuth
6-
import com.tencent.iot.explorer.link.core.auth.callback.MyCallback
7-
import com.tencent.iot.explorer.link.core.auth.response.BaseResponse
8-
import com.tencent.iot.explorer.link.core.auth.response.BindDeviceTokenResponse
9-
import com.tencent.iot.explorer.link.demo.App
8+
import android.widget.Toast
9+
import androidx.core.app.ActivityCompat
10+
import androidx.core.content.ContextCompat
1011
import com.tencent.iot.explorer.link.demo.BaseActivity
1112
import com.tencent.iot.explorer.link.demo.R
12-
import com.tencent.iot.explorer.link.demo.core.response.UserInfoResponse
1313
import com.tencent.iot.explorer.link.demo.databinding.ActivityAddDeviceBinding
1414

1515
/**
16-
* 添加设备界面
16+
* 添加设备页面
1717
*/
1818
class AddDeviceActivity : BaseActivity<ActivityAddDeviceBinding>() {
1919

20-
private var permissions = arrayOf(
21-
Manifest.permission.ACCESS_WIFI_STATE,
22-
Manifest.permission.CHANGE_WIFI_STATE,
23-
Manifest.permission.CHANGE_WIFI_MULTICAST_STATE,
24-
Manifest.permission.CAMERA,
25-
Manifest.permission.ACCESS_FINE_LOCATION
26-
)
27-
28-
private var type = 0
20+
companion object {
21+
private const val REQUEST_CAMERA_PERMISSION = 100
22+
private const val REQUEST_SCAN_QR_CODE = 101
23+
}
2924

30-
override fun getViewBinding(): ActivityAddDeviceBinding = ActivityAddDeviceBinding.inflate(layoutInflater)
25+
override fun getViewBinding(): ActivityAddDeviceBinding =
26+
ActivityAddDeviceBinding.inflate(layoutInflater)
3127

3228
override fun initView() {
33-
binding.menuAddDevice.tvTitle.text = getString(R.string.add_device)
29+
// 初始化输入框默认值
30+
initDefaultValues()
3431
}
3532

36-
3733
override fun setListener() {
3834
with(binding) {
39-
menuAddDevice.ivBack.setOnClickListener { finish() }
40-
tvAddDeviceScanQrcode.setOnClickListener {
41-
request(0)
35+
// 返回按钮
36+
btnBack.setOnClickListener {
37+
finish()
4238
}
43-
tvAddDeviceSmartConfig.setOnClickListener {
44-
request(1)
39+
40+
// 开始扫描按钮
41+
scanArea.setOnClickListener {
42+
startQRCodeScan()
4543
}
46-
tvAddDeviceSoftAp.setOnClickListener {
47-
request(2)
44+
45+
// 添加设备按钮
46+
btnAddDevice.setOnClickListener {
47+
addDevice()
4848
}
4949
}
5050
}
5151

52+
/**
53+
* 初始化默认值
54+
*/
55+
private fun initDefaultValues() {
56+
with(binding) {
57+
// 设置默认设备名称
58+
etDeviceName.setText("智能摄像机")
59+
60+
// 设置默认设备位置
61+
etDeviceLocation.setText("客厅")
62+
}
63+
}
5264

53-
override fun permissionAllGranted() {
54-
jump()
65+
/**
66+
* 开始二维码扫描
67+
*/
68+
private fun startQRCodeScan() {
69+
// 检查相机权限
70+
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
71+
!= PackageManager.PERMISSION_GRANTED) {
72+
// 请求相机权限
73+
ActivityCompat.requestPermissions(
74+
this,
75+
arrayOf(Manifest.permission.CAMERA),
76+
REQUEST_CAMERA_PERMISSION
77+
)
78+
} else {
79+
// 已有权限,启动二维码扫描
80+
launchQRCodeScanner()
81+
}
5582
}
5683

57-
override fun permissionDenied(permission: String) {
58-
requestPermission(arrayOf(permission))
84+
/**
85+
* 启动二维码扫描器
86+
*/
87+
private fun launchQRCodeScanner() {
88+
// TODO: 实现二维码扫描功能
89+
// 这里应该启动一个二维码扫描Activity或使用第三方库
90+
91+
// 临时实现:模拟扫描结果
92+
simulateQRCodeScan()
5993
}
6094

61-
private fun request(type: Int) {
62-
this.type = type
63-
if (checkPermissions(permissions)) {
64-
jump()
65-
} else {
66-
requestPermission(permissions)
67-
}
95+
/**
96+
* 模拟二维码扫描结果
97+
*/
98+
private fun simulateQRCodeScan() {
99+
// 模拟扫描到产品ID
100+
val simulatedProductId = "PRODUCT_123456789"
101+
binding.etProductId.setText(simulatedProductId)
102+
103+
Toast.makeText(this, "二维码扫描成功", Toast.LENGTH_SHORT).show()
68104
}
69105

70106
/**
71-
* 跳转
107+
* 添加设备
72108
*/
73-
private fun jump() {
74-
when (type) {
75-
0 -> {
76-
jumpActivity(ScanBindActivity::class.java)
109+
private fun addDevice() {
110+
with(binding) {
111+
val productId = etProductId.text.toString().trim()
112+
val deviceName = etDeviceName.text.toString().trim()
113+
val deviceLocation = etDeviceLocation.text.toString().trim()
114+
115+
// 验证输入
116+
if (TextUtils.isEmpty(productId)) {
117+
Toast.makeText(this@AddDeviceActivity, "请输入产品ID", Toast.LENGTH_SHORT).show()
118+
etProductId.requestFocus()
119+
return
77120
}
78-
1, 2 -> {
79-
IoTAuth.userImpl.userInfo(object: MyCallback {
80-
override fun fail(msg: String?, reqCode: Int) {
81-
TODO("Not yet implemented")
82-
}
83-
84-
override fun success(response: BaseResponse, reqCode: Int) {
85-
if (response.isSuccess()) {
86-
response.parse(UserInfoResponse::class.java)?.Data.let {
87-
App.data.userInfo = it!!
88-
getBindDevToken(App.data.userInfo.UserID)
89-
}
90-
}
91-
92-
}
93-
})
121+
122+
if (TextUtils.isEmpty(deviceName)) {
123+
Toast.makeText(this@AddDeviceActivity, "请输入设备名称", Toast.LENGTH_SHORT).show()
124+
etDeviceName.requestFocus()
125+
return
94126
}
127+
128+
// 添加设备到系统
129+
addDeviceToSystem(productId, deviceName, deviceLocation)
95130
}
96131
}
97132

98-
private fun getBindDevToken(userId: String) {
99-
IoTAuth.deviceImpl.getBindDevToken(userId, object: MyCallback {
100-
override fun fail(msg: String?, reqCode: Int) {
101-
TODO("Not yet implemented")
133+
/**
134+
* 添加设备到系统
135+
*/
136+
private fun addDeviceToSystem(productId: String, deviceName: String, deviceLocation: String) {
137+
// TODO: 实现添加设备到系统的逻辑
138+
// 这里应该调用相应的API接口来添加设备
139+
140+
// 显示加载状态
141+
showLoading("正在添加设备...")
142+
143+
// 模拟网络请求
144+
Thread {
145+
Thread.sleep(2000)
146+
147+
runOnUiThread {
148+
hideLoading()
149+
150+
// 模拟添加成功
151+
val success = true
152+
153+
if (success) {
154+
Toast.makeText(this, "设备添加成功", Toast.LENGTH_SHORT).show()
155+
156+
// 返回设备列表页面
157+
setResult(RESULT_OK)
158+
finish()
159+
} else {
160+
Toast.makeText(this, "设备添加失败,请重试", Toast.LENGTH_SHORT).show()
161+
}
102162
}
163+
}.start()
164+
}
103165

104-
override fun success(response: BaseResponse, reqCode: Int) {
105-
if (response.isSuccess()) {
106-
response.parse(BindDeviceTokenResponse::class.java)?.Token.let {
107-
if (!TextUtils.isEmpty(it)) {
108-
App.data.bindDeviceToken = it!!
109-
put("type", type)
110-
jumpActivity(ConnectDeviceActivity::class.java)
111-
}
112-
}
166+
/**
167+
* 处理权限请求结果
168+
*/
169+
// override fun onRequestPermissionsResult(
170+
// requestCode: Int,
171+
// permissions: Array<out String>,
172+
// grantResults: IntArray
173+
// ) {
174+
// super.onRequestPermissionsResult(requestCode, permissions, grantResults)
175+
//
176+
// when (requestCode) {
177+
// REQUEST_CAMERA_PERMISSION -> {
178+
// if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
179+
// // 权限已授予,启动二维码扫描
180+
// launchQRCodeScanner()
181+
// } else {
182+
// Toast.makeText(this, "需要相机权限才能扫描二维码", Toast.LENGTH_SHORT).show()
183+
// }
184+
// }
185+
// }
186+
// }
187+
188+
/**
189+
* 处理Activity结果
190+
*/
191+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
192+
super.onActivityResult(requestCode, resultCode, data)
193+
194+
when (requestCode) {
195+
REQUEST_SCAN_QR_CODE -> {
196+
if (resultCode == RESULT_OK) {
197+
// 处理二维码扫描结果
198+
handleQRCodeResult(data)
113199
}
114200
}
201+
}
202+
}
203+
204+
/**
205+
* 处理二维码扫描结果
206+
*/
207+
private fun handleQRCodeResult(data: Intent?) {
208+
// TODO: 从Intent中获取二维码扫描结果
209+
val qrCodeResult = data?.getStringExtra("QR_CODE_RESULT") ?: ""
210+
211+
if (qrCodeResult.isNotEmpty()) {
212+
// 解析二维码内容并填充到表单
213+
parseQRCodeContent(qrCodeResult)
214+
Toast.makeText(this, "二维码扫描成功", Toast.LENGTH_SHORT).show()
215+
} else {
216+
Toast.makeText(this, "二维码扫描失败", Toast.LENGTH_SHORT).show()
217+
}
218+
}
219+
220+
/**
221+
* 解析二维码内容
222+
*/
223+
private fun parseQRCodeContent(qrContent: String) {
224+
// TODO: 根据二维码格式解析内容
225+
// 这里应该根据实际的二维码格式来解析产品ID等信息
226+
227+
// 临时实现:假设二维码内容就是产品ID
228+
binding.etProductId.setText(qrContent)
229+
}
230+
231+
/**
232+
* 显示加载状态
233+
*/
234+
private fun showLoading(message: String) {
235+
// TODO: 实现加载状态显示
236+
binding.btnAddDevice.isEnabled = false
237+
binding.btnAddDevice.text = "添加中..."
238+
}
239+
240+
/**
241+
* 隐藏加载状态
242+
*/
243+
private fun hideLoading() {
244+
// TODO: 实现加载状态隐藏
245+
binding.btnAddDevice.isEnabled = true
246+
binding.btnAddDevice.text = "添加设备"
247+
}
248+
249+
override fun onBackPressed() {
250+
// 检查是否有未保存的输入
251+
if (hasUnsavedInput()) {
252+
showUnsavedChangesDialog()
253+
} else {
254+
super.onBackPressed()
255+
}
256+
}
115257

116-
})
258+
/**
259+
* 检查是否有未保存的输入
260+
*/
261+
private fun hasUnsavedInput(): Boolean {
262+
with(binding) {
263+
return etProductId.text.isNotEmpty() ||
264+
etDeviceName.text.isNotEmpty() ||
265+
etDeviceLocation.text.isNotEmpty()
266+
}
117267
}
118268

269+
/**
270+
* 显示未保存更改对话框
271+
*/
272+
private fun showUnsavedChangesDialog() {
273+
// TODO: 实现未保存更改确认对话框
274+
// 这里应该询问用户是否放弃已输入的内容
275+
276+
// 临时实现:直接返回
277+
super.onBackPressed()
278+
}
119279
}

0 commit comments

Comments
 (0)