cloudroam
2025-04-15 3466799c94227c5ebba9fb201621e745058867ee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.example.firstapp.activity
 
import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import android.widget.Toast
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.example.firstapp.MainActivity
import com.example.firstapp.databinding.ActivityPhoneLoginBinding
import com.example.firstapp.ui.login.LoginViewModel
import com.example.firstapp.utils.Log
import com.example.firstapp.utils.PreferencesManager
 
class PhoneLoginActivity : AppCompatActivity() {
    private lateinit var binding: ActivityPhoneLoginBinding
    private val viewModel: LoginViewModel by viewModels()
    private var countDownTimer: CountDownTimer? = null
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("PhoneLoginActivity", "onCreate called")
        binding = ActivityPhoneLoginBinding.inflate(layoutInflater)
        setContentView(binding.root)
 
        setupViews()
        observeViewModel()
    }
 
    private fun setupViews() {
        binding.apply {
            // 设置上次登录的手机号
            etPhone.setText(PreferencesManager.getLastLoginPhone())
 
            btnBack.setOnClickListener {
                startActivity(Intent(this@PhoneLoginActivity, LoginActivity::class.java))
                finish()
            }
 
            tvSendCode.setOnClickListener {
                val phone = etPhone.text.toString()
                if (phone.length == 11) {
                    viewModel.sendVerificationCode(phone)
                    startCountDown()
                } else {
                    Toast.makeText(
                        this@PhoneLoginActivity,
                        "请输入正确的手机号", Toast.LENGTH_SHORT
                    ).show()
                }
            }
 
            btnLogin.setOnClickListener {
                val phone = etPhone.text.toString()
                val code = etCode.text.toString()
                val invite = etInvite.text.toString()
                if (phone.length == 11 && code.length == 6) {
                    // 保存登录的手机号
                    PreferencesManager.saveLastLoginPhone(phone)
                    viewModel.login(phone, code, invite)
                } else {
                    Toast.makeText(
                        this@PhoneLoginActivity,
                        "请输入完整信息", Toast.LENGTH_SHORT
                    ).show()
                }
            }
        }
    }
 
    private fun observeViewModel() {
        // 观察登录状态
        viewModel.loginState.observe(this) { isLoggedIn ->
            if (isLoggedIn) {
                startActivity(Intent(this, MainActivity::class.java))
                finishAffinity() // 结束所有之前的Activity
            }
        }
        // 观察消息提示
        viewModel.loginMessage.observe(this) { message ->
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
            if (message == "验证码已发送") {
                startCountDown()
            }
        }
 
        // 观察加载状态
        viewModel.isLoading.observe(this) { isLoading ->
            binding.btnLogin.isEnabled = !isLoading
            if (isLoading) {
                binding.btnLogin.text = "登录中..."
            } else {
                binding.btnLogin.text = "登录"
            }
        }
 
    }
 
    private fun startCountDown() {
        binding.tvSendCode.isEnabled = false
        countDownTimer?.cancel()
        countDownTimer = object : CountDownTimer(60000, 1000) {
            override fun onTick(millisUntilFinished: Long) {
                binding.tvSendCode.text = "${millisUntilFinished / 1000}s"
            }
 
            override fun onFinish() {
                binding.tvSendCode.isEnabled = true
                binding.tvSendCode.text = "获取验证码"
            }
        }.start()
    }
 
    override fun onDestroy() {
        super.onDestroy()
        countDownTimer?.cancel()
    }
}