package com.dayu.pipirrapp.activity;
|
|
import static com.dayu.pipirrapp.net.Constants.BASE_URL;
|
|
import android.content.Intent;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapFactory;
|
import android.os.Bundle;
|
import android.os.PersistableBundle;
|
import android.text.InputType;
|
import android.text.TextUtils;
|
import android.util.Base64;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
|
import com.dayu.pipirrapp.MyApplication;
|
import com.dayu.pipirrapp.R;
|
import com.dayu.pipirrapp.bean.db.LoginBean;
|
import com.dayu.pipirrapp.bean.net.CodeResult;
|
import com.dayu.pipirrapp.bean.net.LoginResult;
|
import com.dayu.pipirrapp.dao.DaoSingleton;
|
import com.dayu.pipirrapp.databinding.ActivityLoginBinding;
|
import com.dayu.pipirrapp.net.ApiManager;
|
import com.dayu.pipirrapp.net.BaseResponse;
|
import com.dayu.pipirrapp.net.subscribers.CodeListener;
|
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
|
import com.dayu.pipirrapp.observer.LoginObserver;
|
import com.dayu.pipirrapp.utils.CommonData;
|
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
|
import com.dayu.pipirrapp.utils.ToastUtil;
|
import com.tencent.bugly.crashreport.CrashReport;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
public class LoginActivity extends BaseActivity {
|
private final String TAG = "LoginActivity";
|
|
ActivityLoginBinding binding;
|
LoginObserver loginObserver;
|
//密码是否可见
|
private boolean isPasswordVisible = false;
|
//是否显示验证码
|
private boolean isShowCode;
|
|
private int loginError = 0;
|
private String codeToken;
|
//点击次数到10次后可以重新选择tag
|
int clickNumber;
|
|
|
@Override
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
Log.i(TAG, "onCreate");
|
super.onCreate(savedInstanceState);
|
binding = ActivityLoginBinding.inflate(LayoutInflater.from(this));
|
setContentView(binding.getRoot());
|
initView();
|
initData();
|
}
|
|
|
private void initData() {
|
|
}
|
|
|
private void initView() {
|
loginObserver = new LoginObserver(this);
|
getLifecycle().addObserver(loginObserver);
|
binding.passwordBtn.setOnClickListener((view) -> {
|
togglePasswordVisibility();
|
});
|
binding.loginBtn.setOnClickListener(v -> {
|
String phone = binding.name.getText().toString().trim();
|
String pw = binding.password.getText().toString().trim();
|
String code = binding.code.getText().toString().trim();
|
if (validatePhone(phone) && validatePassword(pw)) {
|
if (isShowCode) {
|
if (!validateCode(code)) {
|
return;
|
}
|
}
|
login(phone, pw, codeToken, code);
|
} else {
|
ToastUtil.showToast(LoginActivity.this, "请输入正确信息");
|
}
|
|
});
|
binding.codeImg.setOnClickListener(v -> {
|
getCode();
|
});
|
binding.codeError.setOnClickListener(v -> {
|
getCode();
|
});
|
binding.version.setOnClickListener(v -> {
|
clickNumber++;
|
if (clickNumber == 10) {
|
//点击次数到10次后可以重新选择tag
|
loginObserver.choesLibrary();
|
clickNumber = 0;
|
}
|
});
|
if (SharedPreferencesHelper.getInstance(LoginActivity.this).get(CommonData.isShowCode, false)) {
|
isShowCode = true;
|
binding.codeLL.setVisibility(View.VISIBLE);
|
getCode();
|
}
|
|
}
|
|
|
private void togglePasswordVisibility() {
|
if (isPasswordVisible) {
|
// 如果密码可见,隐藏密码
|
binding.password.setInputType(
|
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
binding.passwordBtn.setImageResource(R.drawable.vt_ps_close);
|
} else {
|
// 如果密码隐藏,显示密码
|
binding.password.setInputType(InputType.TYPE_CLASS_TEXT);
|
binding.passwordBtn.setImageResource(R.drawable.vt_ps_open);
|
}
|
// 移动光标到末尾
|
binding.password.setSelection(binding.password.getText().length());
|
// 切换标志
|
isPasswordVisible = !isPasswordVisible;
|
}
|
|
/**
|
* 获取验证码
|
*/
|
private void getCode() {
|
Map<String, Object> data = new HashMap<>();
|
data.put("type", "math");//图片类型:char-文本,math-一位数算式,math2-两位数算式
|
ApiManager.getInstance().getCode(data, new CodeListener() {
|
@Override
|
public void onNext(CodeResult body) {
|
try {
|
if (body != null && !TextUtils.isEmpty(body.getBase64())) {
|
String encodedString = body.getBase64();
|
codeToken = body.getToken();
|
// 移除Base64字符串的头部信息
|
encodedString = encodedString.substring("data:image/png;base64,".length());
|
// 对Base64字符串进行解码
|
byte[] imageAsBytes = Base64.decode(encodedString, Base64.DEFAULT);
|
// 使用BitmapFactory将字节数组解码成Bitmap对象
|
Bitmap image = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
|
binding.codeImg.setImageBitmap(image);
|
binding.codeImg.setVisibility(View.VISIBLE);
|
binding.codeError.setVisibility(View.GONE);
|
} else {
|
binding.codeImg.setVisibility(View.INVISIBLE);
|
binding.codeError.setVisibility(View.VISIBLE);
|
ToastUtil.showToast(LoginActivity.this, "验证码获取失败");
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
@Override
|
public void error(Throwable throwable) {
|
|
}
|
});
|
}
|
|
private void login(String phone, String pw, String token, String code) {
|
|
Map<String, Object> data = new HashMap<>();
|
data.put("phone", phone);
|
data.put("password", pw);
|
data.put("orgTag", MyApplication.myApplication.myTag);
|
if (isShowCode) {
|
data.put("token", token);
|
data.put("code", code);
|
}
|
ApiManager.getInstance().requestPostLoading(LoginActivity.this, BASE_URL + ":8079/sso/sso/loginJson", LoginResult.class, data, new SubscriberListener<BaseResponse<LoginResult>>() {
|
@Override
|
public void onNext(BaseResponse<LoginResult> t) {
|
try {
|
if (t.isSuccess()) {
|
SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonData.Token, t.getContent().getToken());
|
MyApplication.myApplication.token = t.getContent().getToken();
|
LoginBean loginBean = DaoSingleton.getInstance(LoginActivity.this).loginDao().findFirst();
|
if (loginBean == null) {
|
loginBean = new LoginBean();
|
}
|
loginBean.setName(t.getContent().getName());
|
loginBean.setPhone(t.getContent().getPhone());
|
DaoSingleton.getInstance(LoginActivity.this).loginDao().update(loginBean);
|
SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonData.isShowCode, false);
|
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
|
startActivity(intent);
|
LoginActivity.this.finish();
|
} else {
|
ToastUtil.showToast(LoginActivity.this, t.getMsg());
|
loginError++;
|
if (loginError >= 3) {
|
isShowCode = true;
|
SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonData.isShowCode, true);
|
binding.codeLL.setVisibility(View.VISIBLE);
|
}
|
}
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
|
}
|
});
|
}
|
|
@Override
|
protected void onStart() {
|
super.onStart();
|
Log.i(TAG, "onStart");
|
}
|
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
Log.i(TAG, "onResume");
|
}
|
|
@Override
|
protected void onRestart() {
|
super.onRestart();
|
Log.i(TAG, "onRestart");
|
}
|
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
Log.i(TAG, "onPause");
|
}
|
|
|
@Override
|
protected void onStop() {
|
super.onStop();
|
Log.i(TAG, "onStop");
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
getLifecycle().removeObserver(loginObserver);
|
Log.i(TAG, "onDestroy");
|
}
|
|
|
@Override
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
super.onSaveInstanceState(outState);
|
Log.i(TAG, "onSaveInstanceState");
|
}
|
|
@Override
|
public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
|
super.onSaveInstanceState(outState, outPersistentState);
|
Log.i(TAG, "onSaveInstanceState---outPersistentState");
|
}
|
|
@Override
|
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
|
super.onRestoreInstanceState(savedInstanceState);
|
}
|
|
// 手机号校验:确保是一个有效的手机号
|
private boolean validatePhone(String phone) {
|
// 使用正则表达式判断是否为有效的手机号码(中国大陆)
|
String phonePattern = "^1[3-9]\\d{9}$"; // 简单的手机号码正则
|
if (phone.isEmpty()) {
|
ToastUtil.showToast(LoginActivity.this, "手机号不能为空!");
|
return false;
|
}
|
// else if (!phone.matches(phonePattern)) {
|
// ToastUtil.showToast(LoginActivity.this, "请输入正确手机号!");
|
// return false;
|
// }
|
else {
|
return true;
|
}
|
}
|
|
// 密码校验:确保密码长度符合要求
|
private boolean validatePassword(String password) {
|
if (password.isEmpty()) {
|
ToastUtil.showToast(LoginActivity.this, "密码不能为空!");
|
return false;
|
}
|
// else if (password.length() < 6) {
|
// ToastUtil.showToast(LoginActivity.this, "密码不能少于6位!");
|
// return false;
|
// }
|
else {
|
return true;
|
}
|
}
|
|
// 验证码校验:确保验证码符合长度要求
|
private boolean validateCode(String code) {
|
if (code.isEmpty()) {
|
ToastUtil.showToast(LoginActivity.this, "验证码不能为空");
|
return false;
|
} else {
|
return true;
|
}
|
}
|
|
|
}
|