diff --git a/app/src/main/java/com/juhabi/birds/login/LoginActivity.kt b/app/src/main/java/com/juhabi/birds/login/LoginActivity.kt index c30f436..3240712 100644 --- a/app/src/main/java/com/juhabi/birds/login/LoginActivity.kt +++ b/app/src/main/java/com/juhabi/birds/login/LoginActivity.kt @@ -29,6 +29,8 @@ class LoginActivity : BaseActivity(), /** 是否使用密码登录;false 为手机号 + 验证码登录 */ private var loginByPassword = true + /** 是否使用手机号登录;false 表示使用邮箱登录。 */ + private var loginByPhone = true private var isPasswordVisible = false private var codeCountDownTimer: CountDownTimer? = null @@ -59,38 +61,57 @@ class LoginActivity : BaseActivity(), ).forEach { button -> button.setOnClickListener(this) } + updateLoginModeText() } override fun onClick(view: View) { when (view.id) { R.id.tvChangeCode -> {//更换登录方式 - //Todo 2.目前这里的切换,只是针对的手机 验证码/密码登录,两种方式。需要修改一下,参考【Todo 1】这里不仅要对手机号的 验证码/密码登录 做处理,同时也要处理 邮箱的 验证码/密码登录;所以这里应该是四种登录方式。 手机验证码/密码 + 邮箱验证码/密码。 + // 在当前手机号/邮箱类型下,切换密码登录和验证码登录。 if (loginByPassword) { binding.linearCode.visibility = View.VISIBLE binding.linearPsd.visibility = View.GONE loginByPassword = false - binding.tvChangeCode.setText(R.string.register_change_psd_login) } else { binding.linearCode.visibility = View.GONE binding.linearPsd.visibility = View.VISIBLE loginByPassword = true - binding.tvChangeCode.setText(R.string.register_change_code_login) } + updateLoginModeText() } R.id.tv_change_login_type ->{ - //Todo 1.这里是切换手机/邮箱 两种登录方式的按钮,点击切换,同时img_login_type改变,【icon_login_phone】/【icon_login_email】两种。 - + // 切换手机号和邮箱登录,并同步输入框图标、提示和输入类型。 + loginByPhone = !loginByPhone + binding.imgLoginType.setImageResource( + if (loginByPhone) R.mipmap.icon_login_phone else R.mipmap.icon_login_email + ) + binding.tvChangeLoginType.text = if (loginByPhone) "邮箱" else "手机" + // 账号类型切换后,同步更新密码/验证码登录切换提示。 + updateLoginModeText() + binding.accountEditText.apply { + hint = if (loginByPhone) "请输入手机号" else "请输入邮箱" + inputType = if (loginByPhone) { + InputType.TYPE_CLASS_PHONE + } else { + InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS + } + text?.clear() + } } R.id.getCodeButton -> {//获取验证码 - //Todo 3. 这里获取验证码,是2种,发送手机验证码和邮箱验证码。另外我【Apiservice】中已经写好了方法,两种获取验证码的接口都有。 - val phone = binding.accountEditText.text.toString().trim() - if (phone.isBlank()) { - ToastUtil.showShort(mContext, "手机号不能为空") + // 根据当前账号类型选择手机或邮箱验证码接口。 + val account = binding.accountEditText.text.toString().trim() + if (account.isBlank()) { + ToastUtil.showShort(mContext, if (loginByPhone) "手机号不能为空" else "邮箱不能为空") return } - presenter?.getPhoneSmsCode(phone, AppConfig.SEND_CODE_SCENE_LOGIN) + if (loginByPhone) { + presenter?.getPhoneSmsCode(account, AppConfig.SEND_CODE_SCENE_LOGIN) + } else { + presenter?.getEmailSmsCode(account, AppConfig.SEND_CODE_SCENE_LOGIN) + } } R.id.registerButton -> {//注册 @@ -106,7 +127,7 @@ class LoginActivity : BaseActivity(), } R.id.loginButton -> {//登录 - //Todo 4.同样也是和前面的逻辑一样,4种登录方法。需要你补齐目前缺少的。 + // 账号类型和登录方式组合成四种登录请求。 val account = binding.accountEditText.text.toString().trim() if (account.isBlank()) { ToastUtil.showShort(mContext, "账号不能为空") @@ -119,14 +140,22 @@ class LoginActivity : BaseActivity(), ToastUtil.showShort(mContext, "密码不能为空") return } - presenter?.loginByPhonePsd(account, password) + if (loginByPhone) { + presenter?.loginByPhonePsd(account, password) + } else { + presenter?.loginByEmailPsd(account, password) + } } else { val code = binding.codeEditText.text.toString().trim() if (code.isBlank()) { ToastUtil.showShort(mContext, "验证码不能为空") return } - presenter?.loginByPhoneSms(account, code) + if (loginByPhone) { + presenter?.loginByPhoneSms(account, code) + } else { + presenter?.loginByEmailSms(account, code) + } } } } @@ -145,6 +174,15 @@ class LoginActivity : BaseActivity(), binding.passwordEditText.typeface = binding.accountEditText.typeface } + /** 根据账号类型和当前登录方式,更新登录方式切换按钮文案。 */ + private fun updateLoginModeText() { + binding.tvChangeCode.text = if (loginByPassword) { + if (loginByPhone) "切换手机号验证码登录" else "切换邮箱验证码登录" + } else { + if (loginByPhone) "切换手机号密码登录" else "切换邮箱密码登录" + } + } + override fun sendCodeSuccess(message: String) { hideLoading() ToastUtil.showShort(mContext, message) diff --git a/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt b/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt index 0adf8ad..04b2983 100644 --- a/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt +++ b/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt @@ -2,6 +2,7 @@ package com.juhabi.birds.login import android.os.Bundle import android.os.CountDownTimer +import android.text.InputType import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -30,6 +31,7 @@ class RegisterActivity : BaseActivity(), LoginContract.LoginView, View.OnClickListener { private var codeCountDownTimer: CountDownTimer? = null + private var registerByPhone = true override fun createBinding(inflater: LayoutInflater): RegisterLayoutBinding { return RegisterLayoutBinding.inflate(inflater) @@ -56,6 +58,7 @@ class RegisterActivity : BaseActivity(), binding.confirmButton, binding.includedTitle.imgBack, binding.linearCountry, + binding.tvChangeLoginType, ).forEach { button -> button.setOnClickListener(this) } @@ -68,27 +71,44 @@ class RegisterActivity : BaseActivity(), finish() } + R.id.tv_change_login_type ->{ + registerByPhone = !registerByPhone + binding.linearCountry.visibility = if (registerByPhone) View.VISIBLE else View.GONE + binding.tvChangeLoginType.text = if (registerByPhone) "邮箱" else "手机" + binding.phoneEditText.apply { + text?.clear() + hint = if (registerByPhone) "请输入手机号" else "请输入邮箱" + inputType = if (registerByPhone) { + InputType.TYPE_CLASS_PHONE + } else { + InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS + } + } + } + R.id.linear_country -> showCountryCodeDialog() R.id.getCodeButton -> {//获取验证码 - if (binding.phoneEditText.text.toString().isBlank()) { - ToastUtil.showShort(mContext, "手机号不能为空") + val account = binding.phoneEditText.text.toString().trim() + if (account.isBlank()) { + ToastUtil.showShort(mContext, if (registerByPhone) "手机号不能为空" else "邮箱不能为空") return } - presenter?.getPhoneSmsCode( - binding.phoneEditText.text.toString(), - AppConfig.SEND_CODE_SCENE_REGISTER - ) + if (registerByPhone) { + presenter?.getPhoneSmsCode(account, AppConfig.SEND_CODE_SCENE_REGISTER) + } else { + presenter?.getEmailSmsCode(account, AppConfig.SEND_CODE_SCENE_REGISTER) + } } R.id.confirmButton -> {//注册 - val phone = binding.phoneEditText.text.toString().trim() + val account = binding.phoneEditText.text.toString().trim() val code = binding.codeEditText.text.toString().trim() val password = binding.passwordEditText.text.toString() val confirmPassword = binding.confirmPasswordEditText.text.toString() - if (phone.isBlank()) { - ToastUtil.showShort(mContext, "手机号不能为空") + if (account.isBlank()) { + ToastUtil.showShort(mContext, if (registerByPhone) "手机号不能为空" else "邮箱不能为空") return } if (code.isBlank()) { @@ -115,7 +135,11 @@ class RegisterActivity : BaseActivity(), return } - presenter?.registerByPhone(phone, code, password) + if (registerByPhone) { + presenter?.registerByPhone(account, code, password) + } else { + presenter?.registerByEmail(account, code, password, "") + } } } } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 9a23b03..c26492a 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -80,7 +80,7 @@ android:layout_height="match_parent" android:layout_gravity="end" android:gravity="center" - android:text="手机" + android:text="邮箱" android:textColor="@color/color_zhu" android:textSize="13sp" /> diff --git a/app/src/main/res/layout/forget_psd_layout.xml b/app/src/main/res/layout/forget_psd_layout.xml index acf8b29..9e0b28f 100644 --- a/app/src/main/res/layout/forget_psd_layout.xml +++ b/app/src/main/res/layout/forget_psd_layout.xml @@ -80,6 +80,16 @@ android:maxLines="1" android:textColorHint="@color/color_999999" android:textSize="16sp" /> + + +