package com.pam.codenamehippie.ui; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import com.pam.codenamehippie.R; import com.pam.codenamehippie.controleur.validation.Validateur; import com.pam.codenamehippie.controleur.validation.ValidateurCourriel; import com.pam.codenamehippie.controleur.validation.ValidateurMotDePasse; import com.pam.codenamehippie.controleur.validation.ValidateurObserver; import com.pam.codenamehippie.http.Authentificateur.Callback; import com.pam.codenamehippie.http.exception.HttpReponseException; import com.pam.codenamehippie.modele.UtilisateurModele; import java.io.IOException; public class LoginActivity extends HippieActivity implements EditText.OnEditorActionListener, ValidateurObserver { private static final String TAG = LoginActivity.class.getSimpleName(); private ValidateurMotDePasse validateurMotDePasse; private boolean motDePassEstValide; private ValidateurCourriel validateurCourriel; private boolean courrielEstValide; private Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_login); this.validateurCourriel = ValidateurCourriel.newInstance(this, ((EditText) this.findViewById( R.id.etCourriel)), true); UtilisateurModele uc = this.authentificateur.getUtilisateur(); String rememberedEmail = (uc != null) ? uc.getCourriel() : ""; if ((rememberedEmail != null)) { this.validateurCourriel.setText(rememberedEmail); } this.validateurMotDePasse = ValidateurMotDePasse.newInstance(this, ((EditText) this.findViewById( R.id.etPassword))); this.validateurMotDePasse.getEditText().setOnEditorActionListener(this); this.loginButton = ((Button) this.findViewById(R.id.bLogin)); } @Override protected void onPause() { super.onPause(); this.validateurCourriel.onPause(); this.validateurMotDePasse.onPause(); this.validateurCourriel.unregisterObserver(this); this.validateurMotDePasse.unregisterObserver(this); } @Override protected void onResume() { super.onResume(); this.validateurCourriel.registerObserver(this); this.validateurMotDePasse.registerObserver(this); this.validateurCourriel.onResume(); this.validateurMotDePasse.onResume(); } @Override protected void onStart() { super.onStart(); if (this.authentificateur.estAuthentifie()) { this.navigueAMainActivity(); } } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; switch (actionId) { case EditorInfo.IME_ACTION_DONE: if (this.loginButton.isEnabled()) { this.onClickLogin(v); } handled = true; break; default: break; } return handled; } @Override public void enValidant(Validateur validateur, boolean estValide) { if (validateur.equals(this.validateurCourriel)) { this.courrielEstValide = estValide; } else if (validateur.equals(this.validateurMotDePasse)) { this.motDePassEstValide = estValide; } this.loginButton.setEnabled(this.motDePassEstValide && this.courrielEstValide); } /** * Methode pour ouvrir le formulaire d'inscription d'un nouvel utilisateur */ public void onClickInscription(View v) { Intent intent = new Intent(LoginActivity.this, RegisterActivity.class); LoginActivity.this.startActivity(intent); } /** * Methode déclechant la connection. * * @param v * un objet view qui est en lien avec l'interaction de connection. */ public void onClickLogin(final View v) { this.afficherLaProgressBar(); this.authentificateur.connecter(this.validateurCourriel.getTextString(), this.validateurMotDePasse.getTextString(), new Callback() { @Override public void surErreur(IOException e) { Snackbar snackbar; if (e instanceof HttpReponseException) { switch (((HttpReponseException) e).getCode()) { case 403: snackbar = Snackbar.make(v, R.string.error_bad_credentials, Snackbar.LENGTH_SHORT); break; default: snackbar = Snackbar.make(v, R.string.error_connection, Snackbar.LENGTH_SHORT); break; } } else { snackbar = Snackbar.make(v, R.string.error_connection, Snackbar.LENGTH_SHORT); } LoginActivity.this.cacherLaProgressbar(); snackbar.show(); } @Override public void surSucces(UtilisateurModele utilisateur) { Snackbar.make(v, LoginActivity.this.getString(R.string.message_welcome, utilisateur.getNomComplet()), Snackbar.LENGTH_SHORT).setCallback(new Snackbar.Callback() { @Override public void onDismissed(Snackbar snackbar, int event) { super.onDismissed(snackbar, event); LoginActivity.this.navigueAMainActivity(); } }).show(); } }); } /** * Methode d'aide pour démarrer sur le main thread la main activity et appeler finish. */ private void navigueAMainActivity() { LoginActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Intent intent = new Intent(LoginActivity.this, MenuActivity.class); LoginActivity.this.startActivity(intent); LoginActivity.this.finish(); } }); } }