123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package me.yoqi.android.netauth.ui.login;
- import android.app.Activity;
- import androidx.lifecycle.Observer;
- import androidx.lifecycle.ViewModelProviders;
- import android.os.Bundle;
- import androidx.annotation.Nullable;
- import androidx.annotation.StringRes;
- import androidx.appcompat.app.AppCompatActivity;
- import android.text.Editable;
- import android.text.TextWatcher;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.inputmethod.EditorInfo;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import me.yoqi.android.netauth.R;
- import me.yoqi.android.netauth.ui.login.LoginViewModel;
- import me.yoqi.android.netauth.ui.login.LoginViewModelFactory;
- public class LoginActivity extends AppCompatActivity {
- private LoginViewModel loginViewModel;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_login);
- loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
- .get(LoginViewModel.class);
- final EditText usernameEditText = findViewById(R.id.username);
- final EditText passwordEditText = findViewById(R.id.password);
- final Button loginButton = findViewById(R.id.login);
- final ProgressBar loadingProgressBar = findViewById(R.id.loading);
- loginViewModel.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) {
- usernameEditText.setError(getString(loginFormState.getUsernameError()));
- }
- if (loginFormState.getPasswordError() != null) {
- passwordEditText.setError(getString(loginFormState.getPasswordError()));
- }
- }
- });
- loginViewModel.getLoginResult().observe(this, new Observer<LoginResult>() {
- @Override
- public void onChanged(@Nullable LoginResult loginResult) {
- if (loginResult == null) {
- return;
- }
- loadingProgressBar.setVisibility(View.GONE);
- 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();
- }
- });
- 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) {
- loginViewModel.loginDataChanged(usernameEditText.getText().toString(),
- passwordEditText.getText().toString());
- }
- };
- usernameEditText.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) {
- loginViewModel.login(usernameEditText.getText().toString(),
- passwordEditText.getText().toString());
- }
- return false;
- }
- });
- loginButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- loadingProgressBar.setVisibility(View.VISIBLE);
- loginViewModel.login(usernameEditText.getText().toString(),
- passwordEditText.getText().toString());
- }
- });
- }
- 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();
- }
- }
|