|
|
|
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> loginFormState = new MutableLiveData<>();
|
|
|
|
//登陆结果
|
|
|
|
private MutableLiveData<LoginResult> loginResult = new MutableLiveData<>();
|
|
|
|
//登陆请求数据源
|
|
|
|
private LoginRepository loginRepository;
|
|
|
|
|
|
|
|
LoginViewModel(LoginRepository loginRepository) {
|
|
|
|
this.loginRepository = loginRepository;
|
|
|
|
}
|
|
|
|
|
|
|
|
LiveData<LoginFormState> getLoginFormState() {
|
|
|
|
return loginFormState;
|
|
|
|
}
|
|
|
|
|
|
|
|
LiveData<LoginResult> getLoginResult() {
|
|
|
|
return loginResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
//登陆
|
|
|
|
public void login(String username, String password) {
|
|
|
|
// can be launched in a separate asynchronous job
|
|
|
|
Result<LoggedInUser> result = loginRepository.login(username, password);
|
|
|
|
|
|
|
|
if (result instanceof Result.Success) {
|
|
|
|
LoggedInUser data = ((Result.Success<LoggedInUser>) 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;
|
|
|
|
}
|
|
|
|
}
|