Mercury-IM/app/src/main/java/org/olomono/messenger/view/LoginActivity.java

114 lines
3.6 KiB
Java
Raw Normal View History

2019-04-14 18:12:04 +02:00
package org.olomono.messenger.view;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.olomono.messenger.R;
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends AppCompatActivity implements TextView.OnEditorActionListener {
// UI references.
private AutoCompleteTextView mJidView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginFormView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// Set up the login form.
mJidView = findViewById(R.id.jid);
mPasswordView = findViewById(R.id.password);
mJidView.setOnEditorActionListener(this);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
loginDetailsEntered();
return true;
}
return false;
}
});
Button mEmailSignInButton = findViewById(R.id.sign_in_button);
mEmailSignInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
loginDetailsEntered();
}
});
mLoginFormView = findViewById(R.id.login_form);
mProgressView = findViewById(R.id.login_progress);
}
private void loginDetailsEntered() {
String jidInput = mJidView.getText().toString();
if (jidInput.isEmpty()) {
mJidView.setError(getResources().getString(R.string.error_field_required));
}
EntityBareJid jid = asValidJidOrNull(jidInput);
if (jid == null) {
mJidView.setError(getResources().getString(R.string.error_invalid_jid));
}
String password = mPasswordView.getText().toString();
if (!isPasswordValid(password)) {
mPasswordView.setError(getResources().getString(R.string.error_invalid_password));
}
}
/**
* Try to parse the input string into a {@link EntityBareJid} and return it.
* Return null on failure.
* @param input input string
* @return valid jid or null
*/
private EntityBareJid asValidJidOrNull(String input) {
return JidCreate.entityBareFromOrNull(input);
}
private boolean isPasswordValid(String password) {
return !password.isEmpty();
}
@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) {
loginDetailsEntered();
return true;
}
}
return false;
}
}