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 { @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() { @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() { @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() { @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(); } }