You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.9 KiB
131 lines
4.9 KiB
package com.community.pocket.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 com.community.pocket.R;
|
|
import com.community.pocket.ui.login.LoginViewModel;
|
|
import com.community.pocket.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();
|
|
}
|
|
}
|
|
|