package com.community.pocket.ui.login; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.community.pocket.R; import com.community.pocket.data.login.LoginRepository; import com.community.pocket.data.login.Result; import com.community.pocket.data.model.LoggedInUser; import com.community.pocket.util.PropertiesUtil; /** * 管理 登陆UI 相关数据 */ 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) { return username != null && username.trim().length() > PropertiesUtil.getIntValue("username.length"); } // A placeholder password validation check //密码校验 private boolean isPasswordValid(String password) { return password != null && password.trim().length() > PropertiesUtil.getIntValue("password.length"); } }