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.ValidUtil; /** * 管理 登陆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 (!ValidUtil.usernamevalid(username)) { loginFormState.setValue(new LoginFormState(R.string.invalid_username, null)); } else if (!ValidUtil.passwordvalid(password)) { loginFormState.setValue(new LoginFormState(null, R.string.invalid_password)); } else { loginFormState.setValue(new LoginFormState(true)); } } }