package com.malmstein.yahnac.login; import android.os.Bundle; import android.support.v4.view.ViewCompat; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.malmstein.yahnac.HNewsActivity; import com.malmstein.yahnac.R; import com.malmstein.yahnac.data.Provider; import com.malmstein.yahnac.injection.Inject; import com.malmstein.yahnac.model.Login; import com.novoda.notils.caster.Views; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; public class LoginActivity extends HNewsActivity implements LoginView.Listener { public static final String VIEW_TOOLBAR_TITLE = "login:toolbar:title"; private TextView headerText; private View progressBar; private LoginView loginView; private Subscription subscription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); setupSubActivity(); View appBar = Views.findById(this, R.id.appbar); ViewCompat.setTransitionName(appBar, VIEW_TOOLBAR_TITLE); headerText = (TextView) findViewById(R.id.login_header_text); progressBar = findViewById(R.id.login_progress); loginView = Views.findById(this, R.id.login_view); } @Override protected void onResume() { super.onResume(); Inject.usageAnalytics().trackPage(getString(R.string.analytics_page_login)); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); loginView.bind(this); } @Override public void onSignIn(final String username, String password) { showProgress(); Provider provider = Inject.provider(); subscription = provider .observeLogin(username, password) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Login.Status>() { @Override public void onCompleted() { if (!subscription.isUnsubscribed()) { subscription.unsubscribe(); } } @Override public void onError(Throwable e) { Inject.crashAnalytics().logSomethingWentWrong("Provider: login: " + username, e); } @Override public void onNext(Login.Status status) { if (status == Login.Status.SUCCESSFUL) { Inject.usageAnalytics().trackLogin(username); showSuccess(username); navigate().toNews(); } else { hideProgress(); loginView.showError(); } } }); } @Override public void onCancel() { Inject.usageAnalytics().trackEvent(getString(R.string.analytics_event_cancel_login)); onBackPressed(); } private void showSuccess(String username) { String message = String.format(getResources().getString(R.string.navigation_drawer_welcome), username); Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } private void showProgress() { headerText.setText(R.string.title_checking_account); progressBar.setVisibility(View.VISIBLE); loginView.showProgress(); } private void hideProgress() { headerText.setText(R.string.title_add_account); progressBar.setVisibility(View.GONE); loginView.hideProgress(); } }