Skip to content

Instantly share code, notes, and snippets.

@talenguyen
Created June 12, 2019 03:17
Show Gist options
  • Save talenguyen/84af2a07b67e9daa97ae69c4d5748674 to your computer and use it in GitHub Desktop.
Save talenguyen/84af2a07b67e9daa97ae69c4d5748674 to your computer and use it in GitHub Desktop.
Example
package com.besimplify.android.test.ui.login;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Patterns;
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.besimplify.android.test.R;
public class LoginActivity extends AppCompatActivity {
class LoginTask {
private final LoginApi loginApi = new LoginApi();
public void login(final String username, final String password, final Callback callback) {
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(final Void... voids) {
try {
return loginApi.login(username, password);
} catch (InterruptedException e) {
return false;
}
}
@Override
protected void onPostExecute(final Boolean result) {
super.onPostExecute(result);
callback.onResult(result);
}
}.execute();
}
}
interface Callback {
void onResult(boolean result);
}
private LoginTask loginTask = new LoginTask();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
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);
TextWatcher afterTextChangedListener = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if (usernameEditText.getText() == null || passwordEditText.getText() == null) {
usernameEditText.setError(getString(R.string.invalid_username));
passwordEditText.setError(getString(R.string.invalid_password));
loginButton.setEnabled(false);
return;
}
final String username = usernameEditText.getText().toString();
if (!Patterns.EMAIL_ADDRESS.matcher(username).matches()) {
usernameEditText.setError(getString(R.string.invalid_username));
loginButton.setEnabled(false);
return;
}
final String password = passwordEditText.getText().toString();
if (password.trim().length() < 5) {
passwordEditText.setError(getString(R.string.invalid_password));
loginButton.setEnabled(false);
return;
}
usernameEditText.setError(null);
passwordEditText.setError(null);
loginButton.setEnabled(true);
}
@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
}
};
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) {
loadingProgressBar.setVisibility(View.VISIBLE);
login(usernameEditText.getText().toString(), passwordEditText.getText().toString());
}
return false;
}
});
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadingProgressBar.setVisibility(View.VISIBLE);
login(
usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
});
}
private void login(final String username, final String password) {
loginTask.login(username, password, new Callback() {
@Override
public void onResult(final boolean result) {
if (result) {
showLoginSuccess(username);
} else {
showLoginFailed();
}
}
});
}
private void showLoginFailed() {
Toast.makeText(getApplicationContext(), R.string.login_failed, Toast.LENGTH_SHORT).show();
}
private void showLoginSuccess(String username) {
String welcome = getString(R.string.welcome) + username;
Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
}
}
class LoginApi {
public boolean login(String username, String passwordd) throws InterruptedException {
Thread.sleep(1_000);
return username.equals("foo@gmail.com") && passwordd.equals("123456");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment