LoginViewModel.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package me.yoqi.android.netauth.ui.login;
  2. import android.util.Patterns;
  3. import androidx.lifecycle.LiveData;
  4. import androidx.lifecycle.MutableLiveData;
  5. import androidx.lifecycle.ViewModel;
  6. import me.yoqi.android.netauth.R;
  7. import me.yoqi.android.netauth.data.LoginRepository;
  8. import me.yoqi.android.netauth.data.Result;
  9. import me.yoqi.android.netauth.data.model.LoggedInUser;
  10. /**
  11. *
  12. */
  13. public class LoginViewModel extends ViewModel {
  14. private final MutableLiveData<LoginFormState> loginFormState = new MutableLiveData<>();
  15. private final MutableLiveData<LoginResult> loginResult = new MutableLiveData<>();
  16. private LoginRepository loginRepository;
  17. LoginViewModel(LoginRepository loginRepository) {
  18. this.loginRepository = loginRepository;
  19. }
  20. /**
  21. * @return
  22. */
  23. LiveData<LoginFormState> getLoginFormState() {
  24. return loginFormState;
  25. }
  26. /**
  27. * 获取登录结果
  28. *
  29. * @return
  30. */
  31. LiveData<LoginResult> getLoginResult() {
  32. return loginResult;
  33. }
  34. /**
  35. * 登录
  36. *
  37. * @param username 用户名
  38. * @param password 密码
  39. */
  40. public void login(String username, String password) {
  41. Result<LoggedInUser> result = loginRepository.login(username, password);
  42. if (result instanceof Result.Success) {
  43. LoggedInUser data = ((Result.Success<LoggedInUser>) result).getData();
  44. loginResult.setValue(new LoginResult(new LoggedInUserView(data.getDisplayName())));
  45. //登录成功,跳转到 MainActivity
  46. } else {
  47. loginResult.setValue(new LoginResult(R.string.login_failed));
  48. }
  49. }
  50. /**
  51. * 密码框更改事件
  52. *
  53. * @param username
  54. * @param password
  55. */
  56. public void loginDataChanged(String username, String password) {
  57. if (!isUserNameValid(username)) {
  58. loginFormState.setValue(new LoginFormState(R.string.invalid_username, null));
  59. } else if (!isPasswordValid(password)) {
  60. loginFormState.setValue(new LoginFormState(null, R.string.invalid_password));
  61. } else {
  62. loginFormState.setValue(new LoginFormState(true));
  63. }
  64. }
  65. // A placeholder username validation check
  66. private boolean isUserNameValid(String username) {
  67. if (username == null) {
  68. return false;
  69. }
  70. if (username.contains("@")) {
  71. return Patterns.EMAIL_ADDRESS.matcher(username).matches();
  72. } else {
  73. return !username.trim().isEmpty();
  74. }
  75. }
  76. // A placeholder password validation check
  77. private boolean isPasswordValid(String password) {
  78. return password != null && password.trim().length() > 5;
  79. }
  80. }