diff --git a/app/src/main/java/com/ckkj/defense_device/bean/JoinTheFamilyBean.kt b/app/src/main/java/com/ckkj/defense_device/bean/JoinTheFamilyBean.kt new file mode 100644 index 0000000..49bc7f2 --- /dev/null +++ b/app/src/main/java/com/ckkj/defense_device/bean/JoinTheFamilyBean.kt @@ -0,0 +1,7 @@ +package com.ckkj.defense_device.bean + + +data class JoinTheFamilyBean( + val parentId: String, + val inviteCode: String, +) \ No newline at end of file diff --git a/app/src/main/java/com/ckkj/defense_device/bean/SelectInviterInfoBean.kt b/app/src/main/java/com/ckkj/defense_device/bean/SelectInviterInfoBean.kt new file mode 100644 index 0000000..d195c4c --- /dev/null +++ b/app/src/main/java/com/ckkj/defense_device/bean/SelectInviterInfoBean.kt @@ -0,0 +1,5 @@ +package com.ckkj.defense_device.bean + +data class SelectInviterInfoBean( + val code: String +) \ No newline at end of file diff --git a/app/src/main/java/com/ckkj/defense_device/home/HomeActivity.kt b/app/src/main/java/com/ckkj/defense_device/home/HomeActivity.kt index af0c949..fb605bb 100644 --- a/app/src/main/java/com/ckkj/defense_device/home/HomeActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/home/HomeActivity.kt @@ -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() + } } /** diff --git a/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt b/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt index 12ac0a3..419c2c9 100644 --- a/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt +++ b/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt @@ -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 { diff --git a/app/src/main/java/com/ckkj/defense_device/login/ForgetPasswordActivity.kt b/app/src/main/java/com/ckkj/defense_device/login/ForgetPasswordActivity.kt index 59d5029..300addd 100644 --- a/app/src/main/java/com/ckkj/defense_device/login/ForgetPasswordActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/login/ForgetPasswordActivity.kt @@ -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() } } diff --git a/app/src/main/java/com/ckkj/defense_device/login/RegisterActivity.kt b/app/src/main/java/com/ckkj/defense_device/login/RegisterActivity.kt index 4f2768f..ac2e7c9 100644 --- a/app/src/main/java/com/ckkj/defense_device/login/RegisterActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/login/RegisterActivity.kt @@ -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() } } diff --git a/app/src/main/java/com/ckkj/defense_device/personal/InvitationCodeActivity.kt b/app/src/main/java/com/ckkj/defense_device/personal/InvitationCodeActivity.kt index f5bd46e..ee9fe61 100644 --- a/app/src/main/java/com/ckkj/defense_device/personal/InvitationCodeActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/personal/InvitationCodeActivity.kt @@ -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() + } + } + } + } + /** * 生成或重新生成邀请码 */ diff --git a/app/src/main/java/com/ckkj/defense_device/personal/JoinFamilyInviteActivity.kt b/app/src/main/java/com/ckkj/defense_device/personal/JoinFamilyInviteActivity.kt index eeda9b2..193d6af 100644 --- a/app/src/main/java/com/ckkj/defense_device/personal/JoinFamilyInviteActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/personal/JoinFamilyInviteActivity.kt @@ -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" } } diff --git a/app/src/main/java/com/ckkj/defense_device/utils/ApiService.kt b/app/src/main/java/com/ckkj/defense_device/utils/ApiService.kt index ff576da..9b0b810 100644 --- a/app/src/main/java/com/ckkj/defense_device/utils/ApiService.kt +++ b/app/src/main/java/com/ckkj/defense_device/utils/ApiService.kt @@ -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 @@ -255,5 +258,18 @@ interface ApiService { suspend fun updateFamilyUser(@Body request: UpdateFamilyUserRequest): GetCodeBean + /** + * 获取邀请人信息 + */ + @POST("/app/selectInviterInfo") + suspend fun selectInviterInfo(@Body request: SelectInviterInfoBean): GetCodeBean + + + /** + * 加入xxx家庭 + */ + @POST("/app/joinTheFamily") + suspend fun joinTheFamily(@Body request: JoinTheFamilyBean): GetCodeBean + } diff --git a/app/src/main/java/com/ckkj/defense_device/utils/RetrofitNetwork.kt b/app/src/main/java/com/ckkj/defense_device/utils/RetrofitNetwork.kt index b1c0081..8040a42 100644 --- a/app/src/main/java/com/ckkj/defense_device/utils/RetrofitNetwork.kt +++ b/app/src/main/java/com/ckkj/defense_device/utils/RetrofitNetwork.kt @@ -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() diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 7772434..2ed1a04 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -48,6 +48,7 @@ 重置密码 新密码 密码重置成功 + 重置中... 人脸登录 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1bfb441..cdebc9e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,6 +44,7 @@ Reset Password New Password Password reset successful + Resetting... Please align your face within the frame