LoginActivity.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package me.yoqi.android.netauth.ui.login;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.text.Editable;
  5. import android.text.TextWatcher;
  6. import android.view.KeyEvent;
  7. import android.view.View;
  8. import android.view.inputmethod.EditorInfo;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.ProgressBar;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. import androidx.annotation.Nullable;
  15. import androidx.annotation.StringRes;
  16. import androidx.appcompat.app.AppCompatActivity;
  17. import androidx.lifecycle.Observer;
  18. import androidx.lifecycle.ViewModelProviders;
  19. import me.yoqi.android.netauth.R;
  20. /**
  21. * 登录界面
  22. */
  23. public class LoginActivity extends AppCompatActivity {
  24. private LoginViewModel loginViewModel;
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_login);
  29. loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
  30. .get(LoginViewModel.class);
  31. // sp中取得保存的账户密码,填充。多个账户的话下拉提供选择
  32. final EditText usernameEditText = findViewById(R.id.username);
  33. final EditText passwordEditText = findViewById(R.id.password);
  34. final Button loginButton = findViewById(R.id.login);
  35. final ProgressBar loadingProgressBar = findViewById(R.id.loading);
  36. loginViewModel.getLoginFormState().observe(this, new Observer<LoginFormState>() {
  37. @Override
  38. public void onChanged(@Nullable LoginFormState loginFormState) {
  39. if (loginFormState == null) {
  40. return;
  41. }
  42. loginButton.setEnabled(loginFormState.isDataValid());
  43. if (loginFormState.getUsernameError() != null) {
  44. usernameEditText.setError(getString(loginFormState.getUsernameError()));
  45. }
  46. if (loginFormState.getPasswordError() != null) {
  47. passwordEditText.setError(getString(loginFormState.getPasswordError()));
  48. }
  49. }
  50. });
  51. loginViewModel.getLoginResult().observe(this, new Observer<LoginResult>() {
  52. @Override
  53. public void onChanged(@Nullable LoginResult loginResult) {
  54. if (loginResult == null) {
  55. return;
  56. }
  57. loadingProgressBar.setVisibility(View.GONE);
  58. if (loginResult.getError() != null) {
  59. showLoginFailed(loginResult.getError());
  60. }
  61. if (loginResult.getSuccess() != null) {
  62. updateUiWithUser(loginResult.getSuccess());
  63. }
  64. setResult(Activity.RESULT_OK);
  65. //Complete and destroy login activity once successful
  66. finish();
  67. }
  68. });
  69. TextWatcher afterTextChangedListener = new TextWatcher() {
  70. @Override
  71. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  72. // ignore
  73. }
  74. @Override
  75. public void onTextChanged(CharSequence s, int start, int before, int count) {
  76. // ignore
  77. }
  78. @Override
  79. public void afterTextChanged(Editable s) {
  80. loginViewModel.loginDataChanged(usernameEditText.getText().toString(),
  81. passwordEditText.getText().toString());
  82. }
  83. };
  84. usernameEditText.addTextChangedListener(afterTextChangedListener);
  85. passwordEditText.addTextChangedListener(afterTextChangedListener);
  86. passwordEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
  87. @Override
  88. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  89. if (actionId == EditorInfo.IME_ACTION_DONE) {
  90. loginViewModel.login(usernameEditText.getText().toString(),
  91. passwordEditText.getText().toString());
  92. }
  93. return false;
  94. }
  95. });
  96. loginButton.setOnClickListener(new View.OnClickListener() {
  97. @Override
  98. public void onClick(View v) {
  99. loadingProgressBar.setVisibility(View.VISIBLE);
  100. loginViewModel.login(usernameEditText.getText().toString(),
  101. passwordEditText.getText().toString());
  102. }
  103. });
  104. }
  105. private void updateUiWithUser(LoggedInUserView model) {
  106. String welcome = getString(R.string.welcome) + model.getDisplayName();
  107. // TODO : initiate successful logged in experience
  108. Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
  109. }
  110. private void showLoginFailed(@StringRes Integer errorString) {
  111. Toast.makeText(getApplicationContext(), errorString, Toast.LENGTH_SHORT).show();
  112. }
  113. }