Created
June 12, 2019 03:17
-
-
Save talenguyen/84af2a07b67e9daa97ae69c4d5748674 to your computer and use it in GitHub Desktop.
Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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