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;
|
import com.duqing.missions.retrofit.RetrofitUtils;
|
import com.duqing.missions.retrofit.api.LoginApiCenter;
|
|
import retrofit2.Call;
|
import retrofit2.Callback;
|
import retrofit2.Response;
|
|
|
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) {
|
/*RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).login(";lajks;dkfjal;ksjdf")
|
|
.subscribeOn(Schedulers.io())//指定网络请求在io后台线程中进行
|
.observeOn(AndroidScheduler.mainThread())//指定observer回调在UI主线程中进行
|
.subscribe(new io.reactivex.Observer<Object>() {
|
@Override
|
public void onSubscribe(Disposable d) {
|
v.setEnabled(false);
|
Log.d(TAG,"onSubscribe");
|
}
|
|
@Override
|
public void onNext(Object value) {
|
Log.d(TAG,"onNext value:"+value);
|
|
}
|
|
@Override
|
public void onError(Throwable e) {
|
v.setEnabled(true);
|
Log.d(TAG,"onError "+e.getMessage());
|
|
}
|
|
@Override
|
public void onComplete() {
|
v.setEnabled(true);
|
Log.d(TAG,"onComplete");
|
|
}
|
});//发起请求,请求的结果会回调到订阅者observer中*/
|
RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).loginCall("asdfasdfasdfasdfasdf").enqueue(new Callback<Object>() {
|
@Override
|
public void onResponse(Call<Object> call, Response<Object> response) {
|
|
}
|
|
@Override
|
public void onFailure(Call<Object> call, Throwable t) {
|
|
}
|
});
|
}
|
});
|
|
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();
|
}
|
}
|