package com.duqing.missions.ui.login.view;
|
|
import android.app.Activity;
|
import android.graphics.Typeface;
|
import android.text.Editable;
|
import android.text.TextWatcher;
|
import android.util.TypedValue;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.inputmethod.EditorInfo;
|
import android.widget.Button;
|
import android.widget.EditText;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import androidx.annotation.Nullable;
|
import androidx.annotation.StringRes;
|
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.ViewModelProvider;
|
|
import com.duqing.missions.R;
|
import com.duqing.missions.base.activities.BaseTitleBarActivity;
|
import com.duqing.missions.databinding.ActivityLoginBinding;
|
|
|
public class LoginActivity extends BaseTitleBarActivity<ActivityLoginBinding,LoginViewModel> {
|
|
|
@Override
|
public void initViews() {
|
|
final EditText phoneEdit = binding.editPhone;
|
final EditText passwordEditText = binding.editPassword;
|
final Button loginButton = binding.login;
|
|
viewModel.getLoginFormState().observe(this, new Observer<LoginFormState>() {
|
@Override
|
public void onChanged(@Nullable LoginFormState loginFormState) {
|
if (loginFormState == null) {
|
return;
|
}
|
loginButton.setEnabled(loginFormState.isDataValid());
|
if (loginFormState.getUsernameError() != null) {
|
phoneEdit.setError(getString(loginFormState.getUsernameError()));
|
}
|
if (loginFormState.getPasswordError() != null) {
|
passwordEditText.setError(getString(loginFormState.getPasswordError()));
|
}
|
}
|
});
|
viewModel.getLoginResult().observe(this, new Observer<LoginResult>() {
|
@Override
|
public void onChanged(@Nullable LoginResult loginResult) {
|
if (loginResult == null) {
|
return;
|
}
|
if (loginResult.getError() != null) {
|
showLoginFailed(loginResult.getError());
|
}
|
if (loginResult.getSuccess() != null) {
|
updateUiWithUser(loginResult.getSuccess());
|
}
|
setResult(Activity.RESULT_OK);
|
|
//Complete and destroy login activity once successful
|
finish();
|
}
|
});
|
binding.txtPasswordTitle.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
binding.containerVerify.setVisibility(View.GONE);
|
binding.containerPassword.setVisibility(View.VISIBLE);
|
checkedStyle(binding.txtPasswordTitle);
|
unCheckStyle(binding.txtVerifyTitle);
|
}
|
});
|
binding.txtVerifyTitle.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
binding.containerPassword.setVisibility(View.GONE);
|
binding.containerVerify.setVisibility(View.VISIBLE);
|
checkedStyle(binding.txtVerifyTitle);
|
unCheckStyle(binding.txtPasswordTitle);
|
}
|
});
|
TextWatcher afterTextChangedListener = new TextWatcher() {
|
@Override
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
// ignore
|
}
|
|
@Override
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
// ignore
|
}
|
|
@Override
|
public void afterTextChanged(Editable s) {
|
viewModel.loginDataChanged(phoneEdit.getText().toString(),
|
passwordEditText.getText().toString());
|
}
|
};
|
phoneEdit.addTextChangedListener(afterTextChangedListener);
|
passwordEditText.addTextChangedListener(afterTextChangedListener);
|
passwordEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
@Override
|
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
viewModel.login(phoneEdit.getText().toString(),
|
passwordEditText.getText().toString());
|
}
|
return false;
|
}
|
});
|
loginButton.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
viewModel.login(phoneEdit.getText().toString(),passwordEditText.getText().toString());
|
}
|
});
|
|
viewModel.getCountDown().observe(this, new Observer<Long>() {
|
@Override
|
public void onChanged(Long l) {
|
if(l>0){
|
binding.textVerify.setTextColor(getResources().getColor(R.color.gray));
|
binding.textVerify.setEnabled(false);
|
binding.textVerify.setText("重新发送("+l+"s)");
|
}else{
|
binding.textVerify.setEnabled(true);
|
binding.textVerify.setTextColor(getResources().getColor(R.color.sky));
|
binding.textVerify.setText("获取验证码");
|
}
|
}
|
});
|
|
binding.textVerify.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
viewModel.startCountDown(0);
|
}
|
});
|
|
}
|
|
@Override
|
public ViewModelProvider.Factory getViewModelFactory() {
|
return new LoginViewModelFactory();
|
}
|
|
public void checkedStyle(TextView textView){
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,17);
|
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
|
}
|
|
public void unCheckStyle(TextView textView){
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);
|
textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
|
}
|
|
private void updateUiWithUser(LoggedInUserView model) {
|
String welcome = getString(R.string.welcome) + model.getDisplayName();
|
// TODO : initiate successful logged in experience
|
Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
|
}
|
|
private void showLoginFailed(@StringRes Integer errorString) {
|
Toast.makeText(getApplicationContext(), errorString, Toast.LENGTH_SHORT).show();
|
}
|
}
|