LoginViewModel.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package me.yoqi.android.netauth.ui.login;
  2. import androidx.lifecycle.LiveData;
  3. import androidx.lifecycle.MutableLiveData;
  4. import androidx.lifecycle.ViewModel;
  5. import android.util.Patterns;
  6. import me.yoqi.android.netauth.data.LoginRepository;
  7. import me.yoqi.android.netauth.data.Result;
  8. import me.yoqi.android.netauth.data.model.LoggedInUser;
  9. import me.yoqi.android.netauth.R;
  10. public class LoginViewModel extends ViewModel {
  11. private MutableLiveData<LoginFormState> loginFormState = new MutableLiveData<>();
  12. private MutableLiveData<LoginResult> loginResult = new MutableLiveData<>();
  13. private LoginRepository loginRepository;
  14. LoginViewModel(LoginRepository loginRepository) {
  15. this.loginRepository = loginRepository;
  16. }
  17. LiveData<LoginFormState> getLoginFormState() {
  18. return loginFormState;
  19. }
  20. LiveData<LoginResult> getLoginResult() {
  21. return loginResult;
  22. }
  23. public void login(String username, String password) {
  24. // can be launched in a separate asynchronous job
  25. Result<LoggedInUser> result = loginRepository.login(username, password);
  26. if (result instanceof Result.Success) {
  27. LoggedInUser data = ((Result.Success<LoggedInUser>) result).getData();
  28. loginResult.setValue(new LoginResult(new LoggedInUserView(data.getDisplayName())));
  29. } else {
  30. loginResult.setValue(new LoginResult(R.string.login_failed));
  31. }
  32. }
  33. public void loginDataChanged(String username, String password) {
  34. if (!isUserNameValid(username)) {
  35. loginFormState.setValue(new LoginFormState(R.string.invalid_username, null));
  36. } else if (!isPasswordValid(password)) {
  37. loginFormState.setValue(new LoginFormState(null, R.string.invalid_password));
  38. } else {
  39. loginFormState.setValue(new LoginFormState(true));
  40. }
  41. }
  42. // A placeholder username validation check
  43. private boolean isUserNameValid(String username) {
  44. if (username == null) {
  45. return false;
  46. }
  47. if (username.contains("@")) {
  48. return Patterns.EMAIL_ADDRESS.matcher(username).matches();
  49. } else {
  50. return !username.trim().isEmpty();
  51. }
  52. }
  53. // A placeholder password validation check
  54. private boolean isPasswordValid(String password) {
  55. return password != null && password.trim().length() > 5;
  56. }
  57. }