Created
December 30, 2016 09:41
-
-
Save mondoktamas/31a32a65b0dac2fcff7d00d20f5c3e35 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.booklava.booklava.presentation.authorisation.signin.inhouse; | |
import android.app.Activity; | |
import android.app.AlertDialog; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.support.annotation.Nullable; | |
import android.support.annotation.VisibleForTesting; | |
import android.support.design.widget.TextInputEditText; | |
import android.support.design.widget.TextInputLayout; | |
import android.support.v4.app.NavUtils; | |
import android.support.v4.app.TaskStackBuilder; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.widget.EditText; | |
import android.widget.Toast; | |
import com.booklava.booklava.R; | |
import com.booklava.booklava.domain.usecase.FacebookSignInUseCase; | |
import com.booklava.booklava.domain.usecase.LinkedInSignInUseCase; | |
import com.booklava.booklava.domain.usecase.SignInUseCase; | |
import com.booklava.booklava.domain.utils.Injection; | |
import com.booklava.booklava.presentation.BooklavaBaseActivity; | |
import com.booklava.booklava.presentation.authorisation.confirm.VerifyEmailActivity; | |
import com.booklava.booklava.presentation.authorisation.forgot.ForgotPasswordActivity; | |
import com.booklava.booklava.presentation.authorisation.signin.social.LinkedInActivity; | |
import com.booklava.booklava.presentation.category.InterestedCategoriesActivity; | |
import com.booklava.booklava.presentation.constants.Arguments; | |
import com.booklava.booklava.presentation.tabs.TabActivity; | |
import com.booklava.booklava.presentation.utils.KeyboardUtils; | |
import com.booklava.core.presentation.utils.Validator; | |
import com.facebook.AccessToken; | |
import com.facebook.CallbackManager; | |
import com.facebook.FacebookException; | |
import com.facebook.login.LoginManager; | |
import com.facebook.login.widget.LoginButton; | |
import java.util.Arrays; | |
import butterknife.BindView; | |
import butterknife.ButterKnife; | |
import butterknife.OnClick; | |
import butterknife.Unbinder; | |
public class SignInActivity extends BooklavaBaseActivity implements SignInContract.SignInView { | |
private final static int REQUEST_CODE_LINKED_IN = 123; | |
@BindView(R.id.layout_user_name) | |
TextInputLayout mUserNameContainer; | |
@BindView(R.id.edit_user_name) | |
EditText mUserName; | |
@BindView(R.id.layout_password) | |
TextInputLayout mPasswordContainer; | |
@BindView(R.id.edit_password) | |
EditText mPassword; | |
@BindView(R.id.login_button_facebook_login) | |
LoginButton mFacebookLogin; | |
SignInPresenter mPresenter; | |
private CallbackManager callbackManager; | |
private Unbinder mUnbinder; | |
public static Intent getLaunchActivity(final Context context) { | |
return new Intent(context, SignInActivity.class); | |
} | |
@Override | |
protected void onCreate(final @Nullable Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_sign_in); | |
mUnbinder = ButterKnife.bind(this); | |
mPresenter = new SignInPresenter(new SignInUseCase(Injection.provideUserRepository(this)), | |
new FacebookSignInUseCase(Injection.provideUserRepository(this)), | |
new LinkedInSignInUseCase(Injection.provideUserRepository(this)), | |
this); | |
initFacebookSettings(); | |
} | |
private void initFacebookSettings() { | |
if (AccessToken.getCurrentAccessToken() != null && !AccessToken.getCurrentAccessToken().isExpired()) | |
LoginManager.getInstance().logOut(); | |
callbackManager = CallbackManager.Factory.create(); | |
mFacebookLogin.setReadPermissions(Arrays.asList("public_profile, email")); | |
mFacebookLogin.registerCallback(callbackManager, mPresenter.getFacebookCallback()); | |
} | |
@VisibleForTesting | |
void setPresenter(final SignInPresenter signInPresenter) { | |
mPresenter = signInPresenter; | |
} | |
@VisibleForTesting | |
void setFacebookLoginButton(final LoginButton loginButton) { | |
mFacebookLogin = loginButton; | |
} | |
@OnClick(R.id.button_sign_in) | |
public void signInClicked() { | |
mPresenter.signInClicked(mUserName.getText().toString().trim(), | |
mPassword.getText().toString().trim()); | |
} | |
@OnClick(R.id.text_forgot_password) | |
public void forgotPasswordClicked() { | |
startActivity(ForgotPasswordActivity.getLaunchIntent(this)); | |
} | |
@OnClick(R.id.button_linked_in) | |
public void signInWithLinkedIn() { | |
final Intent launchIntent = LinkedInActivity.getLaunchIntent(this); | |
startActivityForResult(launchIntent, REQUEST_CODE_LINKED_IN); | |
} | |
@OnClick(R.id.button_fb_login) | |
public void fbButtonClick() { | |
mFacebookLogin.performClick(); | |
} | |
@Override | |
public void userNameIsEmpty() { | |
mUserNameContainer.setError(getText(R.string.sign_in_error_empty_username)); | |
} | |
@Override | |
public void passwordIsEmpty() { | |
mPasswordContainer.setError(getText(R.string.sign_in_error_empty_password)); | |
} | |
@Override | |
public void clearValidationErrors() { | |
mUserNameContainer.setError(null); | |
mPasswordContainer.setError(null); | |
} | |
@Override | |
public void showProgress(final boolean visible) { | |
showProgressDialog(visible); | |
} | |
@Override | |
public void onSignInSuccess(final boolean confirmed, final boolean hasNoFavorites) { | |
KeyboardUtils.hideKeyboard(this); | |
final Intent launchIntent; | |
if (confirmed) { | |
if (hasNoFavorites) { | |
launchIntent = InterestedCategoriesActivity.getLaunchIntent(this); | |
} else { | |
launchIntent = TabActivity.getLaunchIntent(this, TabActivity.TAB_DISCOVER_POSITION); | |
} | |
} else { | |
launchIntent = VerifyEmailActivity.getLaunchIntent(this, hasNoFavorites); | |
} | |
startActivity(launchIntent); | |
finishAffinity(); | |
} | |
@Override | |
public void onSignInFailed(final String message) { | |
Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); | |
} | |
@Override | |
public void onFacebookLoginError(final FacebookException error) { | |
Toast.makeText(this, error.getMessage(), Toast.LENGTH_SHORT).show(); | |
} | |
@Override | |
public void onEmptyEmail(final int loginType) { | |
AlertDialog.Builder builder = new AlertDialog.Builder(this); | |
final View dialogView = getLayoutInflater().inflate(R.layout.dialog_add_email, null); | |
builder.setView(dialogView) | |
.setTitle(R.string.sign_in_alert_title_email) | |
.setCancelable(false) | |
.setNegativeButton(getText(R.string.alert_btn_cancel), (dialog, id) -> dialog.cancel()) | |
.setPositiveButton(getText(R.string.alert_btn_send), null); | |
AlertDialog alert = builder.create(); | |
alert.show(); | |
alert.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(view -> { | |
TextInputLayout inputLayout = ((TextInputLayout) dialogView.findViewById(R.id.input_layout_email)); | |
TextInputEditText email = ((TextInputEditText) dialogView.findViewById(R.id.edit_email)); | |
if (Validator.isEmpty(email.getText().toString().trim())) { | |
inputLayout.setError(getText(R.string.error_empty_email)); | |
} else if (!Validator.isCorrectEmail(email.getText().toString().trim())) { | |
inputLayout.setError(getText(R.string.error_wrong_email)); | |
} else { | |
mPresenter.onSendEmailSubmit(email.getText().toString().trim(), loginType); | |
alert.dismiss(); | |
} | |
}); | |
} | |
@Override | |
public void onFacebookLoginCancel() { | |
Toast.makeText(this, R.string.sign_in_facebook_canceled, Toast.LENGTH_SHORT).show(); | |
} | |
@Override | |
public boolean onOptionsItemSelected(final MenuItem item) { | |
switch (item.getItemId()) { | |
case android.R.id.home: | |
Intent upIntent = NavUtils.getParentActivityIntent(this); | |
if (NavUtils.shouldUpRecreateTask(this, upIntent)) { | |
TaskStackBuilder.create(this) | |
.addNextIntentWithParentStack(upIntent) | |
.startActivities(); | |
} else { | |
NavUtils.navigateUpTo(this, upIntent); | |
} | |
return true; | |
default: | |
return super.onOptionsItemSelected(item); | |
} | |
} | |
@Override | |
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { | |
super.onActivityResult(requestCode, resultCode, data); | |
callbackManager.onActivityResult(requestCode, resultCode, data); | |
switch (resultCode) { | |
case Activity.RESULT_OK: | |
handleSuccessResult(requestCode, data); | |
break; | |
case Activity.RESULT_CANCELED: | |
handleCanceledResult(requestCode); | |
break; | |
} | |
} | |
private void handleCanceledResult(final int requestCode) { | |
switch (requestCode) { | |
case REQUEST_CODE_LINKED_IN: | |
Toast.makeText(getApplicationContext(), R.string.sign_in_linked_in_canceled, Toast.LENGTH_SHORT).show(); | |
break; | |
} | |
} | |
private void handleSuccessResult(final int requestCode, final Intent data) { | |
switch (requestCode) { | |
case REQUEST_CODE_LINKED_IN: | |
final String linkedInAccessToken = data.getStringExtra(Arguments.EXTRA_LINKED_IN_TOKEN); | |
mPresenter.signInWithLinkedIn(linkedInAccessToken); | |
break; | |
} | |
} | |
@Override | |
protected void onDestroy() { | |
mPresenter.detach(); | |
mUnbinder.unbind(); | |
super.onDestroy(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment