package com.khmelenko.lab.varis.activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;
import com.khmelenko.lab.varis.R;
import com.khmelenko.lab.varis.TravisApp;
import com.khmelenko.lab.varis.fragment.AuthFragment;
import com.khmelenko.lab.varis.fragment.SecurityCodeFragment;
import com.khmelenko.lab.varis.mvp.MvpActivity;
import com.khmelenko.lab.varis.mvp.MvpPresenter;
import com.khmelenko.lab.varis.presenter.AuthPresenter;
import com.khmelenko.lab.varis.storage.AppSettings;
import com.khmelenko.lab.varis.util.PresenterKeeper;
import com.khmelenko.lab.varis.view.AuthView;
import javax.inject.Inject;
import butterknife.ButterKnife;
/**
* Authentication activity
*
* @author Dmytro Khmelenko
*/
public final class AuthActivity extends MvpActivity<AuthPresenter> implements
AuthView,
AuthFragment.OnLoginActionListener,
SecurityCodeFragment.OnSecurityCodeAction {
private static final String SECURITY_CODE_INPUT = "securityCodeInput";
private static final String AUTH_FRAGMENT_TAG = "AuthFragment";
private static final String SECURITY_CODE_FRAGMENT_TAG = "SecurityCodeFragment";
private ProgressDialog mProgressDialog;
@Inject
AuthPresenter mPresenter;
@Inject
PresenterKeeper<MvpPresenter> mPresenterKeeper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
ButterKnife.bind(this);
TravisApp.instance().activityInjector().inject(this);
initToolbar();
}
/**
* Shows login section
*/
private void showLoginSection() {
AuthFragment authFragment = (AuthFragment) getSupportFragmentManager().findFragmentByTag(AUTH_FRAGMENT_TAG);
if (authFragment == null) {
authFragment = AuthFragment.newInstance(AppSettings.getServerUrl());
addFragment(R.id.auth_container, authFragment, AUTH_FRAGMENT_TAG);
}
}
/**
* Shows the input for security code
*/
private void showSecurityCodeInput() {
SecurityCodeFragment securityCodeFragment = (SecurityCodeFragment) getSupportFragmentManager().findFragmentByTag(SECURITY_CODE_FRAGMENT_TAG);
if (securityCodeFragment == null) {
securityCodeFragment = SecurityCodeFragment.newInstance();
replaceFragment(R.id.auth_container, securityCodeFragment, SECURITY_CODE_FRAGMENT_TAG);
}
}
@Override
protected AuthPresenter getPresenter() {
MvpPresenter presenter = mPresenterKeeper.get(AuthPresenter.class);
if(presenter != null) {
mPresenter = (AuthPresenter) presenter;
}
return mPresenter;
}
@Override
protected void attachPresenter() {
getPresenter().attach(this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mPresenterKeeper.put(AuthPresenter.class, mPresenter);
}
/**
* Initializes toolbar
*/
private void initToolbar() {
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
@Override
public void onLogin(String userName, String password) {
showProgress();
getPresenter().login(userName, password);
}
@Override
public void onChangeServer(String newServer) {
getPresenter().updateServer(newServer);
}
@Override
public void onSecurityCodeInput(String securityCode) {
showProgress();
getPresenter().twoFactorAuth(securityCode);
}
@Override
public void showProgress() {
mProgressDialog = ProgressDialog.show(this, "", getString(R.string.loading_msg));
}
@Override
public void hideProgress() {
mProgressDialog.dismiss();
}
@Override
public void finishView() {
setResult(RESULT_OK);
finish();
}
@Override
public void showErrorMessage(String message) {
String msg = getString(R.string.error_failed_auth, message);
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public void showTwoFactorAuth() {
showSecurityCodeInput();
}
@Override
public void setInputView(boolean securityCodeInput) {
if (securityCodeInput) {
showSecurityCodeInput();
} else {
showLoginSection();
}
}
}