package com.alorma.github.ui.activity;
import android.accounts.AccountAuthenticatorActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.afollestad.materialdialogs.MaterialDialog;
import com.alorma.github.R;
import com.alorma.github.ui.activity.login.AlternateLoginActivity;
import com.alorma.github.ui.activity.login.OtpCodeActivity;
import com.alorma.github.utils.KeyboardUtils;
import core.User;
public class WelcomeActivity extends AccountAuthenticatorActivity implements WelcomePresenterViewInterface {
private static final int OTP_REQUEST = 1121;
@BindView(R.id.openLogin) View buttonLogin;
@BindView(R.id.openAlternateLogin) View buttonLoginToken;
@BindView(R.id.login_username) TextInputLayout loginUsername;
@BindView(R.id.login_password) TextInputLayout loginPassword;
private WelcomePresenter welcomePresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
ButterKnife.bind(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
welcomePresenter = new WelcomePresenter(this);
buttonLogin.setEnabled(false);
TextWatcher buttonEnablerTextWatcher = new ButtonEnablerTextWatcher();
addTextWatcher(loginUsername, buttonEnablerTextWatcher);
addTextWatcher(loginPassword, buttonEnablerTextWatcher);
buttonLogin.setOnClickListener(v -> {
String username = getFromTextInputLayout(loginUsername);
String passwords = getFromTextInputLayout(loginPassword);
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(passwords)) {
login(username, passwords);
}
});
}
private void login(String username, String passwords) {
welcomePresenter.login(username, passwords);
}
@Override
public void willLogin() {
buttonLogin.setEnabled(false);
}
@Override
public void onErrorUnauthorized() {
loginPassword.setError(getString(R.string.unauthorized_login));
showAlternateLogin();
}
private void showAlternateLogin() {
buttonLoginToken.setVisibility(View.VISIBLE);
buttonLoginToken.setOnClickListener(view -> openAlternateLogin());
}
private void openAlternateLogin() {
Intent intent = new Intent(this, AlternateLoginActivity.class);
startActivity(intent);
finish();
}
@Override
public void onErrorTwoFactorException() {
show2faRequest(R.string.write_otp_code_sms);
}
@Override
public void onErrorTwoFactorAppException() {
show2faRequest(R.string.write_otp_code_app);
}
private void show2faRequest(@StringRes int message) {
new MaterialDialog.Builder(this).input("Otp code", null, true, (dialog, input) -> {
}).positiveText("Ok").negativeText("Cancel").onPositive((dialog, which) -> {
if (dialog.getInputEditText() != null && dialog.getInputEditText().getText() != null) {
String otpCode = dialog.getInputEditText().getText().toString();
welcomePresenter.setOtpCode(otpCode);
}
}).title(message).show();
}
@Override
public void onGenericError() {
Toast.makeText(this, "Error login", Toast.LENGTH_SHORT).show();
}
@Override
public void finishAccess(final User user) {
setResult(Activity.RESULT_OK);
MainActivity.startActivity(this);
finish();
}
@Override
public void didLogin() {
buttonLogin.setEnabled(true);
if (buttonLogin != null) {
KeyboardUtils.lowerKeyboard(this);
}
}
public String getFromTextInputLayout(TextInputLayout inputLayout) {
if (inputLayout != null && inputLayout.getEditText() != null && inputLayout.getEditText().getText() != null) {
return inputLayout.getEditText().getText().toString();
}
return null;
}
public void addTextWatcher(TextInputLayout inputLayout, TextWatcher textWatcher) {
if (inputLayout != null && inputLayout.getEditText() != null && textWatcher != null) {
inputLayout.getEditText().addTextChangedListener(textWatcher);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == OTP_REQUEST) {
String code = data.getStringExtra(OtpCodeActivity.EXTRA_MESSAGE);
if (code != null) {
welcomePresenter.setOtpCode(code);
}
}
}
}
@Override
protected void onStart() {
super.onStart();
welcomePresenter.start(this);
}
@Override
protected void onStop() {
welcomePresenter.stop();
super.onStop();
}
private class ButtonEnablerTextWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String username = getFromTextInputLayout(loginUsername);
String passwords = getFromTextInputLayout(loginPassword);
buttonLogin.setEnabled(!TextUtils.isEmpty(username) && !TextUtils.isEmpty(passwords));
}
@Override
public void afterTextChanged(Editable s) {
}
}
}