package com.community.pocket.ui.login; import android.util.Patterns; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.community.pocket.R; import com.community.pocket.data.LoginRepository; import com.community.pocket.data.Result; import com.community.pocket.data.model.LoggedInUser; /** * 登陆表单数据 */ public class LoginViewModel extends ViewModel { //登陆表单校验信息 private MutableLiveData loginFormState = new MutableLiveData<>(); //登陆结果 private MutableLiveData loginResult = new MutableLiveData<>(); //登陆请求数据源 private LoginRepository loginRepository; LoginViewModel(LoginRepository loginRepository) { this.loginRepository = loginRepository; } LiveData getLoginFormState() { return loginFormState; } LiveData getLoginResult() { return loginResult; } //登陆 public void login(String username, String password) { // can be launched in a separate asynchronous job Result result = loginRepository.login(username, password); if (result instanceof Result.Success) { LoggedInUser data = ((Result.Success) result).getData(); loginResult.setValue(new LoginResult(new LoggedInUserView(data.getDisplayName()))); } else { loginResult.setValue(new LoginResult(R.string.login_failed)); } } //登陆表单数据变化触发数据校验 void loginDataChanged(String username, String password) { if (!isUserNameValid(username)) { loginFormState.setValue(new LoginFormState(R.string.invalid_username, null)); } else if (!isPasswordValid(password)) { loginFormState.setValue(new LoginFormState(null, R.string.invalid_password)); } else { loginFormState.setValue(new LoginFormState(true)); } } // A placeholder username validation check //用户名校验 private boolean isUserNameValid(String username) { if (username == null) { return false; } if (username.contains("@")) { return Patterns.EMAIL_ADDRESS.matcher(username).matches(); } else { return !username.trim().isEmpty(); } } // A placeholder password validation check //密码校验 private boolean isPasswordValid(String password) { return password != null && password.trim().length() > 5; } }