获取邀请人信息和扫一扫加入xxx家庭
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package com.ckkj.defense_device.bean
|
||||
|
||||
|
||||
data class JoinTheFamilyBean(
|
||||
val parentId: String,
|
||||
val inviteCode: String,
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.ckkj.defense_device.bean
|
||||
|
||||
data class SelectInviterInfoBean(
|
||||
val code: String
|
||||
)
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ckkj.defense_device.home
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.ckkj.defense_device.R
|
||||
@@ -7,6 +8,10 @@ import com.ckkj.defense_device.base.BaseActivity
|
||||
import com.ckkj.defense_device.databinding.HomeActivityBinding
|
||||
|
||||
class HomeActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
const val EXTRA_REFRESH = "extra_refresh"
|
||||
}
|
||||
// ViewBinding 核心对象
|
||||
private lateinit var binding: HomeActivityBinding
|
||||
|
||||
@@ -49,6 +54,28 @@ class HomeActivity : BaseActivity() {
|
||||
binding.ivProfile.setImageResource(R.mipmap.profile_checked)
|
||||
binding.tvProfile.setTextColor(resources.getColor(R.color.ic_selected))
|
||||
}
|
||||
|
||||
handleRefreshIntent(intent)
|
||||
}
|
||||
|
||||
override fun onNewIntent(intent: Intent?) {
|
||||
super.onNewIntent(intent)
|
||||
if (intent != null) {
|
||||
setIntent(intent)
|
||||
handleRefreshIntent(intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleRefreshIntent(intent: Intent) {
|
||||
if (intent.getBooleanExtra(EXTRA_REFRESH, false)) {
|
||||
intent.removeExtra(EXTRA_REFRESH)
|
||||
switchFragment(homeMenuFragment)
|
||||
binding.ivHome.setImageResource(R.mipmap.home_checked)
|
||||
binding.tvHome.setTextColor(resources.getColor(R.color.ic_selected))
|
||||
binding.ivProfile.setImageResource(R.mipmap.profile)
|
||||
binding.tvProfile.setTextColor(resources.getColor(R.color.ic_normal))
|
||||
homeMenuFragment.refreshHomeData()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,8 +27,10 @@ import com.ckkj.defense_device.adapter.FamilyAdapter
|
||||
import com.ckkj.defense_device.bean.DeviceBean
|
||||
import com.ckkj.defense_device.bean.FamilyBean
|
||||
import com.ckkj.defense_device.bean.SwitchFamilyRequest
|
||||
import com.ckkj.defense_device.bean.SelectInviterInfoBean
|
||||
import com.ckkj.defense_device.databinding.HomeMenuFragmentBinding
|
||||
import com.ckkj.defense_device.liveVideo.LiveVideoActivity
|
||||
import com.ckkj.defense_device.personal.JoinFamilyInviteActivity
|
||||
import com.ckkj.defense_device.utils.DeviceIdEvent
|
||||
import com.ckkj.defense_device.utils.DeviceUpdateEvent
|
||||
import com.ckkj.defense_device.utils.FamilySwitchEvent
|
||||
@@ -36,6 +38,7 @@ import com.ckkj.defense_device.utils.MessageStatusManager
|
||||
import com.ckkj.defense_device.utils.RetrofitNetwork
|
||||
import com.ckkj.defense_device.utils.UserinfoUtil
|
||||
import com.ckkj.defense_device.view.DefenseDialogs
|
||||
import com.ckkj.defense_device.view.LoadingDialog
|
||||
import com.ckkj.defense_device.view.showDefenseDialog
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.maning.mlkitscanner.scan.MNScanManager
|
||||
@@ -44,6 +47,7 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.json.JSONObject
|
||||
//主页碎片
|
||||
class HomeMenuFragment : Fragment() {
|
||||
// ViewBinding
|
||||
@@ -63,13 +67,13 @@ class HomeMenuFragment : Fragment() {
|
||||
ActivityResultContracts.RequestMultiplePermissions()
|
||||
) { permissions ->
|
||||
val cameraGranted = permissions[Manifest.permission.CAMERA] ?: false
|
||||
|
||||
|
||||
val storageGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
permissions[Manifest.permission.READ_MEDIA_IMAGES] ?: false
|
||||
} else {
|
||||
permissions[Manifest.permission.READ_EXTERNAL_STORAGE] ?: false
|
||||
}
|
||||
|
||||
|
||||
if (cameraGranted && storageGranted) {
|
||||
startScan()
|
||||
} else {
|
||||
@@ -82,7 +86,7 @@ class HomeMenuFragment : Fragment() {
|
||||
requireContext(),
|
||||
Manifest.permission.CAMERA
|
||||
)
|
||||
|
||||
|
||||
val storagePermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
ContextCompat.checkSelfPermission(
|
||||
requireContext(),
|
||||
@@ -95,7 +99,7 @@ class HomeMenuFragment : Fragment() {
|
||||
)
|
||||
}
|
||||
|
||||
if (cameraPermission == PackageManager.PERMISSION_GRANTED &&
|
||||
if (cameraPermission == PackageManager.PERMISSION_GRANTED &&
|
||||
storagePermission == PackageManager.PERMISSION_GRANTED) {
|
||||
startScan()
|
||||
} else {
|
||||
@@ -121,23 +125,86 @@ class HomeMenuFragment : Fragment() {
|
||||
MNScanManager.RESULT_SUCCESS -> {
|
||||
val result = data?.getStringArrayListExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS)
|
||||
if (!result.isNullOrEmpty()) {
|
||||
ToastUtils.showToast(requireContext(), "扫码成功: $result")
|
||||
val inviteCode = parseInviteCode(result[0])
|
||||
if (inviteCode.isNullOrEmpty()) {
|
||||
Toast.makeText(requireContext(), "无效的邀请码", Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
fetchInviterInfo(inviteCode)
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showToast(requireContext(), "扫码结果为空")
|
||||
Toast.makeText(requireContext(), "扫码结果为空", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
MNScanManager.RESULT_FAIL -> {
|
||||
val error = data?.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR)
|
||||
ToastUtils.showToast(requireContext(), "扫码失败: $error")
|
||||
Toast.makeText(requireContext(), "扫码失败: $error", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
MNScanManager.RESULT_CANCLE -> {
|
||||
ToastUtils.showToast(requireContext(), "扫码取消")
|
||||
Toast.makeText(requireContext(), "扫码取消", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun parseInviteCode(scanResult: String): String? {
|
||||
val trimmed = scanResult.trim()
|
||||
if (trimmed.isEmpty()) return null
|
||||
return try {
|
||||
if (trimmed.startsWith("{")) {
|
||||
JSONObject(trimmed).optString("code").takeIf { it.isNotEmpty() }
|
||||
} else {
|
||||
trimmed
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
trimmed
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchInviterInfo(inviteCode: String) {
|
||||
val loadingDialog = LoadingDialog(requireActivity()).apply { show() }
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
val response = RetrofitNetwork.getNetworkService()
|
||||
.selectInviterInfo(SelectInviterInfoBean(code = inviteCode))
|
||||
withContext(Dispatchers.Main) {
|
||||
loadingDialog.dismiss()
|
||||
if (response.code == 200 && response.data != null) {
|
||||
val inviter = response.data
|
||||
val parentId = inviter.resolveParentId()
|
||||
if (parentId.isNullOrEmpty()) {
|
||||
Toast.makeText(
|
||||
requireContext(),
|
||||
getString(R.string.network_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@withContext
|
||||
}
|
||||
val intent = Intent(requireContext(), JoinFamilyInviteActivity::class.java).apply {
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_INVITE_CODE, inviteCode)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_NICK_NAME, inviter.nickName)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_AVATAR, inviter.avatar)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_PARENT_ID, parentId)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_USER_ID, inviter.userId)
|
||||
}
|
||||
startActivity(intent)
|
||||
} else {
|
||||
Toast.makeText(
|
||||
requireContext(),
|
||||
response.msg.ifBlank { getString(R.string.network_error) },
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
withContext(Dispatchers.Main) {
|
||||
loadingDialog.dismiss()
|
||||
Toast.makeText(requireContext(), R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val unreadCountChangeListener = object : MessageStatusManager.UnreadCountChangeListener {
|
||||
override fun onUnreadCountChanged(count: Int) {
|
||||
updateUnreadCountUI(count)
|
||||
@@ -202,7 +269,7 @@ class HomeMenuFragment : Fragment() {
|
||||
startColor = resources.getColor(R.color.gradientLayout1),
|
||||
endColor = resources.getColor(R.color.gradientLayout2)
|
||||
)
|
||||
binding.message.setOnClickListener {
|
||||
binding.message.setOnClickListener {
|
||||
val intent = Intent(requireContext(), MessageActivity::class.java)
|
||||
startActivity(intent)
|
||||
}
|
||||
@@ -284,6 +351,10 @@ class HomeMenuFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
fun refreshHomeData() {
|
||||
fetchFamilyList()
|
||||
}
|
||||
|
||||
private fun fetchFamilyList() {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
|
||||
@@ -10,6 +10,7 @@ import bean.ForgotRequest
|
||||
import com.ckkj.defense_device.R
|
||||
import com.ckkj.defense_device.databinding.ForgetPasswordActivityBinding
|
||||
import com.ckkj.defense_device.utils.RetrofitNetwork
|
||||
import com.ckkj.defense_device.view.LoadingDialog
|
||||
import com.google.firebase.crashlytics.buildtools.reloc.org.apache.http.util.TextUtils
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -20,6 +21,7 @@ import java.util.regex.Pattern
|
||||
|
||||
class ForgetPasswordActivity : AppCompatActivity() {
|
||||
private lateinit var binding: ForgetPasswordActivityBinding
|
||||
private var isLoading = false
|
||||
private var countDownTimer: CountDownTimer? = null
|
||||
private var isSendingCode = false
|
||||
|
||||
@@ -63,7 +65,9 @@ class ForgetPasswordActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
binding.btnNext.setOnClickListener {
|
||||
performResetPassword()
|
||||
if (!isLoading) {
|
||||
performResetPassword()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,8 +167,11 @@ class ForgetPasswordActivity : AppCompatActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
isLoading = true
|
||||
binding.btnNext.isEnabled = false
|
||||
binding.btnNext.text = "重置中..."
|
||||
val loadingDialog = LoadingDialog(this)
|
||||
.setMessage(getString(R.string.resetting))
|
||||
.apply { show() }
|
||||
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
@@ -175,8 +182,9 @@ class ForgetPasswordActivity : AppCompatActivity() {
|
||||
)
|
||||
val response = RetrofitNetwork.getNetworkService().forgotPassword(forgotRequest)
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
binding.btnNext.isEnabled = true
|
||||
binding.btnNext.text = "确定"
|
||||
|
||||
if (response.code == 200) {
|
||||
Toast.makeText(this@ForgetPasswordActivity, R.string.reset_success, Toast.LENGTH_SHORT).show()
|
||||
@@ -187,8 +195,9 @@ class ForgetPasswordActivity : AppCompatActivity() {
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
binding.btnNext.isEnabled = true
|
||||
binding.btnNext.text = "确定"
|
||||
Toast.makeText(this@ForgetPasswordActivity, R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import bean.RegisterRequest
|
||||
import com.ckkj.defense_device.R
|
||||
import com.ckkj.defense_device.databinding.RegisterActivityBinding
|
||||
import com.ckkj.defense_device.utils.RetrofitNetwork
|
||||
import com.ckkj.defense_device.view.LoadingDialog
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -158,7 +159,9 @@ class RegisterActivity : AppCompatActivity() {
|
||||
|
||||
isLoading = true
|
||||
binding.btnNext.isEnabled = false
|
||||
binding.btnNext.text = getString(R.string.registering)
|
||||
val loadingDialog = LoadingDialog(this)
|
||||
.setMessage(getString(R.string.registering))
|
||||
.apply { show() }
|
||||
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
@@ -174,8 +177,8 @@ class RegisterActivity : AppCompatActivity() {
|
||||
val response = RetrofitNetwork.getNetworkService().register(registerRequest)
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
binding.btnNext.isEnabled = true
|
||||
binding.btnNext.text = getString(R.string.next_step)
|
||||
|
||||
if (response.code == 200) {
|
||||
Toast.makeText(this@RegisterActivity, R.string.register_success, Toast.LENGTH_SHORT).show()
|
||||
@@ -190,8 +193,8 @@ class RegisterActivity : AppCompatActivity() {
|
||||
} catch (e: Exception) {
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
binding.btnNext.isEnabled = true
|
||||
binding.btnNext.text = getString(R.string.next_step)
|
||||
Toast.makeText(this@RegisterActivity, R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.ckkj.defense_device.R
|
||||
import com.ckkj.defense_device.bean.RecommendationCodeBean
|
||||
import com.ckkj.defense_device.bean.SelectInviterInfoBean
|
||||
import com.ckkj.defense_device.bean.VerifyOptionPasswordRequest
|
||||
import com.ckkj.defense_device.databinding.DialogExpireTimeBinding
|
||||
import com.ckkj.defense_device.databinding.InvitationCodeActivityBinding
|
||||
@@ -38,6 +39,7 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.json.JSONObject
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.util.Hashtable
|
||||
@@ -172,23 +174,86 @@ class InvitationCodeActivity : AppCompatActivity() {
|
||||
MNScanManager.RESULT_SUCCESS -> {
|
||||
val result = data?.getStringArrayListExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS)
|
||||
if (!result.isNullOrEmpty()) {
|
||||
ToastUtils.showToast(this@InvitationCodeActivity, "扫码成功: $result")
|
||||
val inviteCode = parseInviteCode(result[0])
|
||||
if (inviteCode.isNullOrEmpty()) {
|
||||
Toast.makeText(this@InvitationCodeActivity, "无效的邀请码", Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
fetchInviterInfo(inviteCode)
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showToast(this@InvitationCodeActivity, "扫码结果为空")
|
||||
Toast.makeText(this@InvitationCodeActivity, "扫码结果为空", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
MNScanManager.RESULT_FAIL -> {
|
||||
val error = data?.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR)
|
||||
ToastUtils.showToast(this@InvitationCodeActivity, "扫码失败: $error")
|
||||
Toast.makeText(this@InvitationCodeActivity, "扫码失败: $error", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
MNScanManager.RESULT_CANCLE -> {
|
||||
ToastUtils.showToast(this@InvitationCodeActivity, "扫码取消")
|
||||
Toast.makeText(this@InvitationCodeActivity, "扫码取消", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun parseInviteCode(scanResult: String): String? {
|
||||
val trimmed = scanResult.trim()
|
||||
if (trimmed.isEmpty()) return null
|
||||
return try {
|
||||
if (trimmed.startsWith("{")) {
|
||||
JSONObject(trimmed).optString("code").takeIf { it.isNotEmpty() }
|
||||
} else {
|
||||
trimmed
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
trimmed
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchInviterInfo(inviteCode: String) {
|
||||
val loadingDialog = LoadingDialog(this).apply { show() }
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
val response = RetrofitNetwork.getNetworkService()
|
||||
.selectInviterInfo(SelectInviterInfoBean(code = inviteCode))
|
||||
withContext(Dispatchers.Main) {
|
||||
loadingDialog.dismiss()
|
||||
if (response.code == 200 && response.data != null) {
|
||||
val inviter = response.data
|
||||
val parentId = inviter.resolveParentId()
|
||||
if (parentId.isNullOrEmpty()) {
|
||||
Toast.makeText(
|
||||
this@InvitationCodeActivity,
|
||||
getString(R.string.network_error),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
return@withContext
|
||||
}
|
||||
val intent = Intent(this@InvitationCodeActivity, JoinFamilyInviteActivity::class.java).apply {
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_INVITE_CODE, inviteCode)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_NICK_NAME, inviter.nickName)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_AVATAR, inviter.avatar)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_PARENT_ID, parentId)
|
||||
putExtra(JoinFamilyInviteActivity.EXTRA_USER_ID, inviter.userId)
|
||||
}
|
||||
startActivity(intent)
|
||||
} else {
|
||||
Toast.makeText(
|
||||
this@InvitationCodeActivity,
|
||||
response.msg.ifBlank { getString(R.string.network_error) },
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
withContext(Dispatchers.Main) {
|
||||
loadingDialog.dismiss()
|
||||
Toast.makeText(this@InvitationCodeActivity, R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成或重新生成邀请码
|
||||
*/
|
||||
|
||||
@@ -1,14 +1,29 @@
|
||||
package com.ckkj.defense_device.personal
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.ckkj.defense_device.R
|
||||
import com.ckkj.defense_device.bean.JoinTheFamilyBean
|
||||
import com.ckkj.defense_device.databinding.JoinFamilyInviteActivityBinding
|
||||
import com.ckkj.defense_device.home.HomeActivity
|
||||
import com.ckkj.defense_device.utils.RetrofitNetwork
|
||||
import com.ckkj.defense_device.view.LoadingDialog
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
// 邀请加入家庭
|
||||
class JoinFamilyInviteActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: JoinFamilyInviteActivityBinding
|
||||
private var isLoading = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -21,5 +36,88 @@ class JoinFamilyInviteActivity : AppCompatActivity() {
|
||||
.init()
|
||||
|
||||
binding.ivBack.setOnClickListener { finish() }
|
||||
binding.btnJoinNow.setOnClickListener { joinFamily() }
|
||||
displayInviterInfo()
|
||||
}
|
||||
|
||||
private fun joinFamily() {
|
||||
if (isLoading) return
|
||||
|
||||
val parentId = intent.getStringExtra(EXTRA_USER_ID).orEmpty()
|
||||
val inviteCode = intent.getStringExtra(EXTRA_INVITE_CODE).orEmpty()
|
||||
if (parentId.isEmpty() || inviteCode.isEmpty()) {
|
||||
Log.e(TAG, "加入家庭参数无效: parentId=$parentId, inviteCode=$inviteCode")
|
||||
Toast.makeText(this, R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
return
|
||||
}
|
||||
|
||||
Log.e(TAG, "加入家庭请求: parentId=$parentId, inviteCode=$inviteCode")
|
||||
isLoading = true
|
||||
val loadingDialog = LoadingDialog(this).apply { show() }
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
val response = RetrofitNetwork.getNetworkService()
|
||||
.joinTheFamily(JoinTheFamilyBean(parentId = parentId, inviteCode = inviteCode))
|
||||
Log.e(TAG, "加入家庭响应: code=${response.code}, msg=${response.msg}, data=${response.data}")
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
if (response.code == 200) {
|
||||
Log.e(TAG, "加入家庭成功,返回首页刷新")
|
||||
ToastUtils.showSuccess(this@JoinFamilyInviteActivity, getString(R.string.operation_success))
|
||||
val homeIntent = Intent(this@JoinFamilyInviteActivity, HomeActivity::class.java).apply {
|
||||
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
|
||||
putExtra(HomeActivity.EXTRA_REFRESH, true)
|
||||
}
|
||||
startActivity(homeIntent)
|
||||
finish()
|
||||
} else {
|
||||
Log.e(TAG, "加入家庭失败: code=${response.code}, msg=${response.msg}")
|
||||
Toast.makeText(
|
||||
this@JoinFamilyInviteActivity,
|
||||
response.msg.ifBlank { getString(R.string.network_error) },
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "加入家庭请求异常", e)
|
||||
withContext(Dispatchers.Main) {
|
||||
isLoading = false
|
||||
loadingDialog.dismiss()
|
||||
Toast.makeText(this@JoinFamilyInviteActivity, R.string.network_error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun displayInviterInfo() {
|
||||
val nickName = intent.getStringExtra(EXTRA_NICK_NAME).orEmpty()
|
||||
val avatar = intent.getStringExtra(EXTRA_AVATAR)
|
||||
|
||||
binding.tvNickname.text = nickName.ifEmpty { getString(R.string.nickname_placeholder) }
|
||||
binding.tvInviteMessage.text = getString(
|
||||
R.string.invite_join_family_message,
|
||||
nickName.ifEmpty { getString(R.string.nickname_placeholder) }
|
||||
)
|
||||
|
||||
val requestOptions = RequestOptions()
|
||||
.placeholder(R.mipmap.img)
|
||||
.error(R.mipmap.img)
|
||||
|
||||
Glide.with(this)
|
||||
.load(avatar)
|
||||
.apply(requestOptions)
|
||||
.circleCrop()
|
||||
.into(binding.ivAvatar)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "JoinFamilyInviteActivity"
|
||||
const val EXTRA_INVITE_CODE = "invite_code"
|
||||
const val EXTRA_NICK_NAME = "nick_name"
|
||||
const val EXTRA_AVATAR = "avatar"
|
||||
const val EXTRA_PARENT_ID = "parent_id"
|
||||
const val EXTRA_USER_ID = "user_id"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,13 @@ import com.ckkj.defense_device.bean.DeleteBean
|
||||
import com.ckkj.defense_device.bean.DeleteDeviceUserRequest
|
||||
import com.ckkj.defense_device.bean.DeviceAlarmResponse
|
||||
import com.ckkj.defense_device.bean.FamilyMembersBean
|
||||
import com.ckkj.defense_device.bean.InviterInfoBean
|
||||
import com.ckkj.defense_device.bean.JoinTheFamilyBean
|
||||
import com.ckkj.defense_device.bean.MessageBean
|
||||
import com.ckkj.defense_device.bean.MessageListResponse
|
||||
import com.ckkj.defense_device.bean.ObtainInviterInformationBean
|
||||
import com.ckkj.defense_device.bean.ObtainInviterInformationRequest
|
||||
import com.ckkj.defense_device.bean.SelectInviterInfoBean
|
||||
import com.ckkj.defense_device.bean.SwitchFamilyRequest
|
||||
import com.ckkj.defense_device.bean.UpdateFamilyUserRequest
|
||||
import com.ckkj.defense_device.bean.UpdatePassword
|
||||
@@ -192,7 +195,7 @@ interface ApiService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取邀请人信息
|
||||
* 获取家庭成员信息
|
||||
*/
|
||||
@POST("/app/obtainInviterInformation")
|
||||
suspend fun obtainInviterInformation(@Body request: ObtainInviterInformationRequest): GetCodeBean<ObtainInviterInformationBean>
|
||||
@@ -255,5 +258,18 @@ interface ApiService {
|
||||
suspend fun updateFamilyUser(@Body request: UpdateFamilyUserRequest): GetCodeBean<Any>
|
||||
|
||||
|
||||
/**
|
||||
* 获取邀请人信息
|
||||
*/
|
||||
@POST("/app/selectInviterInfo")
|
||||
suspend fun selectInviterInfo(@Body request: SelectInviterInfoBean): GetCodeBean<InviterInfoBean>
|
||||
|
||||
|
||||
/**
|
||||
* 加入xxx家庭
|
||||
*/
|
||||
@POST("/app/joinTheFamily")
|
||||
suspend fun joinTheFamily(@Body request: JoinTheFamilyBean): GetCodeBean<Any>
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ import java.util.concurrent.TimeUnit
|
||||
object RetrofitNetwork {
|
||||
|
||||
private const val DEFAULT_TIMEOUT = 30L
|
||||
//const val BASE_URL = "https://stem-boozy-margarine.ngrok-free.dev"
|
||||
const val BASE_URL = "http://service.reinkun.com:8001"
|
||||
const val BASE_URL = "https://stem-boozy-margarine.ngrok-free.dev"
|
||||
//const val BASE_URL = "http://service.reinkun.com:8001"
|
||||
|
||||
private var retrofit: Retrofit? = null
|
||||
private val gson = Gson()
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
<string name="reset_password">重置密码</string>
|
||||
<string name="new_password">新密码</string>
|
||||
<string name="reset_success">密码重置成功</string>
|
||||
<string name="resetting">重置中...</string>
|
||||
|
||||
<!-- Face Login/Verification -->
|
||||
<string name="face_login">人脸登录</string>
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
<string name="reset_password">Reset Password</string>
|
||||
<string name="new_password">New Password</string>
|
||||
<string name="reset_success">Password reset successful</string>
|
||||
<string name="resetting">Resetting...</string>
|
||||
|
||||
<!-- Face Login/Verification -->
|
||||
<string name="face_capture_hint">Please align your face within the frame</string>
|
||||
|
||||
Reference in New Issue
Block a user