package com.kickstarter.ui.activities;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.SwitchCompat;
import android.util.Pair;
import android.widget.TextView;
import com.jakewharton.rxbinding.view.RxView;
import com.kickstarter.R;
import com.kickstarter.libs.ActivityRequestCodes;
import com.kickstarter.libs.BaseActivity;
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel;
import com.kickstarter.libs.utils.SwitchCompatUtils;
import com.kickstarter.libs.utils.ViewUtils;
import com.kickstarter.ui.toolbars.LoginToolbar;
import com.kickstarter.ui.views.LoginPopupMenu;
import com.kickstarter.viewmodels.FacebookConfirmationViewModel;
import butterknife.Bind;
import butterknife.BindString;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.android.schedulers.AndroidSchedulers;
import static com.kickstarter.libs.utils.TransitionUtils.slideInFromLeft;
import static com.kickstarter.libs.utils.TransitionUtils.slideInFromRight;
import static com.kickstarter.libs.utils.TransitionUtils.transition;
@RequiresActivityViewModel(FacebookConfirmationViewModel.class)
public class FacebookConfirmationActivity extends BaseActivity<FacebookConfirmationViewModel> {
protected @Bind(R.id.email) TextView emailTextView;
protected @Bind(R.id.help_button) TextView helpButton;
protected @Bind(R.id.sign_up_with_facebook_toolbar) LoginToolbar signUpWithFacebookToolbar;
protected @Bind(R.id.newsletter_switch) SwitchCompat newsletterSwitch;
protected @BindString(R.string.facebook_confirmation_navbar_title) String signUpWithFacebookString;
protected @BindString(R.string.signup_error_title) String errorTitleString;
@Override
public void onCreate(final @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.facebook_confirmation_layout);
ButterKnife.bind(this);
signUpWithFacebookToolbar.setTitle(signUpWithFacebookString);
viewModel.outputs.prefillEmail()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::prefillEmail);
viewModel.outputs.signupSuccess()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(__ -> onSuccess());
viewModel.outputs.sendNewslettersIsChecked()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(b -> SwitchCompatUtils.setCheckedWithoutAnimation(newsletterSwitch, b));
viewModel.errors.signupError()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(e -> ViewUtils.showDialog(this, errorTitleString, e));
RxView.clicks(newsletterSwitch)
.compose(bindToLifecycle())
.subscribe(__ -> viewModel.inputs.sendNewslettersClick(newsletterSwitch.isChecked()));
}
@OnClick(R.id.create_new_account_button)
public void createNewAccountClick() {
viewModel.inputs.createNewAccountClick();
}
@OnClick(R.id.disclaimer)
public void disclaimerClick() {
new LoginPopupMenu(this, helpButton).show();
}
@OnClick(R.id.login_button)
public void loginWithEmailClick() {
final Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, ActivityRequestCodes.LOGIN_FLOW);
transition(this, slideInFromRight());
}
public void onSuccess() {
setResult(Activity.RESULT_OK);
finish();
}
@Override
protected @Nullable Pair<Integer, Integer> exitTransition() {
return slideInFromLeft();
}
private void prefillEmail(final @NonNull String email) {
emailTextView.setText(email);
}
}