package com.arellomobile.mvp.sample.github.ui.activities; import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import com.arellomobile.mvp.MvpAppCompatActivity; import com.arellomobile.mvp.presenter.InjectPresenter; import com.arellomobile.mvp.sample.github.R; import com.arellomobile.mvp.sample.github.mvp.presenters.SignInPresenter; import com.arellomobile.mvp.sample.github.mvp.views.SignInView; import butterknife.BindView; import butterknife.ButterKnife; /** * A login screen that offers login via email/password. */ public class SignInActivity extends MvpAppCompatActivity implements SignInView { @InjectPresenter SignInPresenter mSignInPresenter; @BindView(R.id.email) EditText mEmailView; @BindView(R.id.password) EditText mPasswordView; @BindView(R.id.email_sign_in_button) Button mSignInButton; @BindView(R.id.login_form) View mLoginFormView; @BindView(R.id.login_progress) View mProgressView; private AlertDialog mErrorDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); ButterKnife.bind(this); mPasswordView.setOnEditorActionListener((textView, id, keyEvent) -> { if (id == R.id.login || id == EditorInfo.IME_NULL) { attemptLogin(); return true; } return false; }); mSignInButton.setOnClickListener(view -> attemptLogin()); } private void attemptLogin() { mSignInPresenter.signIn(mEmailView.getText().toString(), mPasswordView.getText().toString()); } @Override public void startSignIn() { toggleProgressVisibility(true); } @Override public void finishSignIn() { toggleProgressVisibility(false); } private void toggleProgressVisibility(final boolean show) { mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); } @Override public void failedSignIn(String message) { mErrorDialog = new AlertDialog.Builder(this) .setTitle(R.string.app_name) .setMessage(message) .setOnCancelListener(dialog -> mSignInPresenter.onErrorCancel()) .show(); } @Override public void hideError() { if (mErrorDialog != null && mErrorDialog.isShowing()) { mErrorDialog.cancel(); } } @Override public void hideFormError() { mEmailView.setError(null); mPasswordView.setError(null); } @Override public void showFormError(Integer emailError, Integer passwordError) { mEmailView.setError(emailError == null ? null : getString(emailError)); mPasswordView.setError(passwordError == null ? null : getString(passwordError)); } @Override public void successSignIn() { final Intent intent = new Intent(this, SplashActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } @Override protected void onDestroy() { if (mErrorDialog != null && mErrorDialog.isShowing()) { mErrorDialog.setOnCancelListener(null); mErrorDialog.dismiss(); } super.onDestroy(); } }