Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/login/LoginActivity.java

159 lines
5.1 KiB
Java
Raw Normal View History

2019-05-13 03:19:17 +02:00
package org.mercury_im.messenger.ui.login;
2019-04-14 18:12:04 +02:00
import android.os.Bundle;
2019-06-03 01:16:49 +02:00
import android.util.Log;
2019-04-14 18:12:04 +02:00
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.TextView;
2019-08-03 19:05:50 +02:00
import androidx.appcompat.app.AppCompatActivity;
2019-06-29 19:06:07 +02:00
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;
2019-06-06 13:49:13 +02:00
import com.google.android.material.textfield.TextInputEditText;
2019-05-18 10:06:16 +02:00
import org.mercury_im.messenger.MercuryImApplication;
2019-05-13 03:19:17 +02:00
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.persistence.entity.AccountModel;
2019-07-31 17:44:10 +02:00
import org.mercury_im.messenger.util.TextChangedListener;
2019-04-14 18:12:04 +02:00
import butterknife.BindView;
import butterknife.ButterKnife;
2019-06-03 01:16:49 +02:00
2019-04-14 18:12:04 +02:00
/**
* A login screen that offers login via email/password.
*/
2019-08-03 19:05:50 +02:00
public class LoginActivity extends AppCompatActivity implements TextView.OnEditorActionListener {
2019-04-14 18:12:04 +02:00
// UI references.
2019-06-03 01:16:49 +02:00
@BindView(R.id.jid)
2019-06-06 13:49:13 +02:00
TextInputEditText mJidView;
2019-06-03 01:16:49 +02:00
@BindView(R.id.password)
2019-06-06 13:49:13 +02:00
TextInputEditText mPasswordView;
2019-04-14 18:12:04 +02:00
2019-06-20 17:20:23 +02:00
@BindView(R.id.sign_in_button)
Button mSignInView;
2019-05-04 00:27:02 +02:00
private LoginViewModel viewModel;
2019-04-14 18:12:04 +02:00
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
2019-05-18 10:06:16 +02:00
MercuryImApplication.getApplication().getAppComponent().inject(this);
2019-04-14 18:12:04 +02:00
// Set up the login form.
2019-06-03 01:16:49 +02:00
ButterKnife.bind(this);
2019-04-14 18:12:04 +02:00
viewModel = new ViewModelProvider(this).get(LoginViewModel.class);
2019-08-24 23:06:06 +02:00
observeViewModel(viewModel);
2019-05-27 21:34:11 +02:00
displayCredentials(viewModel.getAccount());
2019-04-22 04:54:02 +02:00
2019-08-24 23:06:06 +02:00
mJidView.setOnEditorActionListener(this);
mPasswordView.setOnEditorActionListener(this);
mJidView.addTextChangedListener(new TextChangedListener() {
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
viewModel.onJidInputChanged(charSequence.toString());
Log.d("Mercury", "onTextChanged");
}
});
mPasswordView.addTextChangedListener(new TextChangedListener() {
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
viewModel.onPasswordInputChanged(charSequence.toString());
Log.d("Mercury", "onTextChanged");
}
});
mSignInView.setOnClickListener(view -> viewModel.loginDetailsEntered());
}
private void observeViewModel(LoginViewModel viewModel) {
2019-07-29 22:14:35 +02:00
viewModel.getJidError().observe(this, jidError -> {
if (jidError == null) return;
String errorMessage = null;
switch (jidError) {
case none:
break;
case emptyJid:
errorMessage = getResources().getString(R.string.error_field_required);
break;
case invalidJid:
errorMessage = getResources().getString(R.string.error_invalid_jid);
break;
case unknownJid:
errorMessage = "Unknown Jid!";
}
mJidView.setError(errorMessage);
});
viewModel.getPasswordError().observe(this, passwordError -> {
if (passwordError == null) return;
String errorMessage = null;
switch (passwordError) {
case none:
break;
case emptyPassword:
errorMessage = getResources().getString(R.string.error_field_required);
break;
case invalidPassword:
errorMessage = getResources().getString(R.string.error_invalid_password);
break;
case incorrectPassword:
errorMessage = getResources().getString(R.string.error_incorrect_password);
break;
}
mPasswordView.setError(errorMessage);
});
2019-08-24 23:06:06 +02:00
viewModel.getSigninSuccessful().observe(this, aBoolean -> {
if (Boolean.TRUE.equals(aBoolean)) {
finish();
2019-04-14 18:12:04 +02:00
}
});
2019-06-20 17:20:23 +02:00
}
private void displayCredentials(LiveData<AccountModel> account) {
2019-05-27 21:34:11 +02:00
account.observe(this, accountModel -> {
if (accountModel == null) {
return;
}
if (accountModel.getJid() != null) {
mJidView.setText(accountModel.getJid().toString());
}
if (accountModel.getPassword() != null) {
mPasswordView.setText(accountModel.getPassword());
}
});
}
2019-04-14 18:12:04 +02:00
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (v.getId()) {
case R.id.jid:
if (actionId == EditorInfo.IME_ACTION_NEXT) {
mPasswordView.requestFocus();
return true;
}
break;
case R.id.password:
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL) {
2019-07-29 22:14:35 +02:00
viewModel.loginDetailsEntered();
2019-04-14 18:12:04 +02:00
return true;
}
}
return false;
}
}