关联用户2
This commit is contained in:
@@ -3,16 +3,27 @@ package com.example.defenseapplication.liveVideo
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.example.defenseapplication.R
|
||||
import com.example.defenseapplication.adapter.AddLinkedUserAdapter
|
||||
import com.example.defenseapplication.adapter.UserItem
|
||||
import com.example.defenseapplication.bean.AddDeviceUserRequest
|
||||
import com.example.defenseapplication.bean.FamilyMembersBean
|
||||
import com.example.defenseapplication.databinding.AddLinkedUserActivityBinding
|
||||
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||
import com.example.defenseapplication.utils.DeviceUserUpdateEvent
|
||||
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
//添加关联用户
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class AddLinkedUserActivity : AppCompatActivity() {
|
||||
private lateinit var binding: AddLinkedUserActivityBinding
|
||||
private val selectedPhoneSet = mutableSetOf<String>()
|
||||
private val userItemList = mutableListOf<UserItem>()
|
||||
private val selectedUserIdMap = mutableMapOf<String, String>()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -26,36 +37,112 @@ class AddLinkedUserActivity : AppCompatActivity() {
|
||||
|
||||
initRecyclerView()
|
||||
initListener()
|
||||
fetchFamilyMembers()
|
||||
}
|
||||
|
||||
private fun initRecyclerView() {
|
||||
val mockData = listOf(
|
||||
UserItem("王五", "13566666666"),
|
||||
UserItem("赵六", "15733333333")
|
||||
)
|
||||
|
||||
binding.rvAddLinkedUser.layoutManager = LinearLayoutManager(this)
|
||||
binding.rvAddLinkedUser.adapter =
|
||||
AddLinkedUserAdapter(mockData, selectedPhoneSet) { phone, isChecked ->
|
||||
AddLinkedUserAdapter(userItemList, selectedPhoneSet, selectedUserIdMap) { phone, isChecked, userId ->
|
||||
if (isChecked) {
|
||||
selectedPhoneSet.add(phone)
|
||||
userId?.let { selectedUserIdMap[phone] = it }
|
||||
} else {
|
||||
selectedPhoneSet.remove(phone)
|
||||
selectedUserIdMap.remove(phone)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchFamilyMembers() {
|
||||
lifecycleScope.launch {
|
||||
try {
|
||||
val response = RetrofitNetwork.getNetworkService().getFamilyMembers()
|
||||
withContext(Dispatchers.Main) {
|
||||
if (response.code == 200) {
|
||||
if (response.data != null && response.data.isNotEmpty()) {
|
||||
updateFamilyMemberList(response.data)
|
||||
} else {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "暂无家庭成员数据", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "请求失败: ${response.msg}", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
android.util.Log.e("AddLinkedUserActivity", "网络请求异常", e)
|
||||
withContext(Dispatchers.Main) {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "网络请求失败: ${e.message}", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateFamilyMemberList(familyMembersList: List<FamilyMembersBean>) {
|
||||
userItemList.clear()
|
||||
familyMembersList.forEach { member ->
|
||||
userItemList.add(
|
||||
UserItem(
|
||||
name = member.nickName ?: member.parentName ?: "未知用户",
|
||||
phone = member.phonenumber ?: "",
|
||||
userId = member.userId ?: ""
|
||||
)
|
||||
)
|
||||
}
|
||||
binding.rvAddLinkedUser.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun initListener() {
|
||||
binding.btnAddLinkedUser.setOnClickListener {
|
||||
if (selectedPhoneSet.isEmpty()) {
|
||||
Toast.makeText(this, getString(R.string.please_select_at_least_one_user), Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
val message = getString(R.string.selected_users_voice, selectedPhoneSet.size)
|
||||
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
|
||||
addDeviceUser()
|
||||
}
|
||||
}
|
||||
binding.ivBack.setOnClickListener {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
private fun addDeviceUser() {
|
||||
val deviceId = DeviceIdEvent.getDeviceId()
|
||||
if (deviceId.isNullOrEmpty()) {
|
||||
Toast.makeText(this, "设备ID为空", Toast.LENGTH_SHORT).show()
|
||||
return
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
var successCount = 0
|
||||
for ((phone, userId) in selectedUserIdMap) {
|
||||
try {
|
||||
val request = AddDeviceUserRequest(
|
||||
deviceId = deviceId,
|
||||
userId = userId
|
||||
)
|
||||
val response = RetrofitNetwork.getNetworkService().addDeviceUser(request)
|
||||
withContext(Dispatchers.Main) {
|
||||
if (response.code == 200) {
|
||||
successCount++
|
||||
} else {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "添加用户 $phone 失败: ${response.msg}", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
withContext(Dispatchers.Main) {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "添加用户 $phone 失败: 网络错误", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
if (successCount > 0) {
|
||||
Toast.makeText(this@AddLinkedUserActivity, "成功添加 $successCount 个用户", Toast.LENGTH_SHORT).show()
|
||||
DeviceUserUpdateEvent.notifyUpdate()
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,10 @@ import com.example.defenseapplication.adapter.LinkedUser
|
||||
import com.example.defenseapplication.adapter.LinkedUserAdapter
|
||||
import com.example.defenseapplication.bean.DeleteDeviceUserRequest
|
||||
import com.example.defenseapplication.bean.DeviceUserBean
|
||||
import com.example.defenseapplication.bean.FamilyMembersBean
|
||||
import com.example.defenseapplication.databinding.LinkedUserActivityBinding
|
||||
import com.example.defenseapplication.utils.DeviceIdEvent
|
||||
import com.example.defenseapplication.utils.DeviceUserUpdateEvent
|
||||
import com.example.defenseapplication.utils.RetrofitNetwork
|
||||
import com.example.defenseapplication.view.CustomDialogFragmentText
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
@@ -55,6 +57,18 @@ class LinkedUserActivity : AppCompatActivity() {
|
||||
initData()
|
||||
initListener()
|
||||
setupModeUI()
|
||||
DeviceUserUpdateEvent.addListener(deviceUserUpdateListener)
|
||||
}
|
||||
|
||||
private val deviceUserUpdateListener = object : DeviceUserUpdateEvent.DeviceUserUpdateListener {
|
||||
override fun onDeviceUserUpdated() {
|
||||
fetchUserList()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
DeviceUserUpdateEvent.removeListener(deviceUserUpdateListener)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
@@ -222,22 +236,29 @@ class LinkedUserActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
fetchDeviceUserList()
|
||||
fetchUserList()
|
||||
}
|
||||
|
||||
private fun fetchDeviceUserList() {
|
||||
val deviceId = DeviceIdEvent.getDeviceId()
|
||||
if (deviceId.isNullOrEmpty()) {
|
||||
Toast.makeText(this, "设备 ID 为空", Toast.LENGTH_SHORT).show()
|
||||
return
|
||||
}
|
||||
|
||||
private fun fetchUserList() {
|
||||
lifecycleScope.launch {
|
||||
try {
|
||||
val response = RetrofitNetwork.getNetworkService().getDeviceUserList(deviceId)
|
||||
val response = if (mode == MODE_SETTINGS) {
|
||||
val deviceId = DeviceIdEvent.getDeviceId()
|
||||
if (deviceId.isNullOrEmpty()) {
|
||||
Toast.makeText(this@LinkedUserActivity, "设备 ID 为空", Toast.LENGTH_SHORT).show()
|
||||
return@launch
|
||||
}
|
||||
RetrofitNetwork.getNetworkService().getDeviceUserList(deviceId)
|
||||
} else {
|
||||
RetrofitNetwork.getNetworkService().getFamilyMembers()
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
if (response.code == 200 && response.data != null) {
|
||||
updateDeviceUserList(response.data)
|
||||
if (mode == MODE_SETTINGS) {
|
||||
updateDeviceUserList(response.data as List<DeviceUserBean>)
|
||||
} else {
|
||||
updateFamilyMembersList(response.data as List<FamilyMembersBean>)
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(this@LinkedUserActivity, response.msg, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
@@ -267,14 +288,29 @@ class LinkedUserActivity : AppCompatActivity() {
|
||||
adapter.submitList(userList)
|
||||
}
|
||||
|
||||
private fun updateFamilyMembersList(familyMembersList: List<FamilyMembersBean>) {
|
||||
userList.clear()
|
||||
familyMembersList.forEach { member ->
|
||||
userList.add(
|
||||
LinkedUser(
|
||||
userId = member.userId ?: "",
|
||||
name = member.nickName ?: member.parentName ?: "未知用户",
|
||||
phone = member.phonenumber ?: "",
|
||||
idCard = member.idCard ?: "",
|
||||
time = member.createTime ?: ""
|
||||
)
|
||||
)
|
||||
}
|
||||
adapter.submitList(userList)
|
||||
}
|
||||
|
||||
private fun initListener() {
|
||||
binding.ivBack.setOnClickListener {
|
||||
finish()
|
||||
}
|
||||
|
||||
binding.searchLayout.setOnClickListener {
|
||||
val intent = Intent(this, LinkedUserSearchActivity::class.java)
|
||||
startActivityForResult(intent, REQUEST_CODE_SEARCH)
|
||||
|
||||
}
|
||||
|
||||
binding.btnAddLinkedUser.setOnClickListener {
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
package com.example.defenseapplication.liveVideo
|
||||
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.example.defenseapplication.databinding.LinkedUserSearchActivityBinding
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
|
||||
//搜索
|
||||
class LinkedUserSearchActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: LinkedUserSearchActivityBinding
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = LinkedUserSearchActivityBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
ImmersionBar.with(this)
|
||||
.statusBarDarkFont(true)
|
||||
.titleBar(binding.topBar)
|
||||
.init()
|
||||
|
||||
initListener()
|
||||
initData()
|
||||
}
|
||||
|
||||
private fun initListener() {
|
||||
binding.ivBack.setOnClickListener {
|
||||
finish()
|
||||
}
|
||||
|
||||
binding.btnSearch.setOnClickListener {
|
||||
initData()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initData() {
|
||||
val searchText = binding.etSearch.text.toString().trim()
|
||||
|
||||
binding.rvSearchResult.layoutManager = LinearLayoutManager(this)
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user