package com.novoda.bonfire.navigation;
import android.content.Intent;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.novoda.bonfire.BaseActivity;
import com.novoda.bonfire.channel.data.model.Channel;
import com.novoda.bonfire.login.LoginGoogleApiClient;
import com.novoda.notils.logger.simple.Log;
public class AndroidLoginNavigator implements LoginNavigator {
private static final int RC_SIGN_IN = 242;
private final BaseActivity activity;
private final LoginGoogleApiClient googleApiClient;
private final Navigator navigator;
private LoginResultListener loginResultListener;
public AndroidLoginNavigator(BaseActivity activity, LoginGoogleApiClient googleApiClient, Navigator navigator) {
this.activity = activity;
this.googleApiClient = googleApiClient;
this.navigator = navigator;
}
@Override
public void toChannel(Channel channel) {
navigator.toChannel(channel);
}
@Override
public void toChannels() {
navigator.toChannels();
activity.finish();
}
@Override
public void toCreateChannel() {
navigator.toCreateChannel();
}
@Override
public void toMembersOf(Channel channel) {
navigator.toMembersOf(channel);
}
@Override
public void toParent() {
navigator.toParent();
}
@Override
public void toChannelWithClearedHistory(Channel channel) {
navigator.toChannelWithClearedHistory(channel);
}
@Override
public void toShareInvite(String sharingLink) {
navigator.toShareInvite(sharingLink);
}
@Override
public void toLogin() {
//No op
}
@Override
public void toGooglePlusLogin() {
Intent signInIntent = googleApiClient.getSignInIntent();
activity.startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void attach(LoginResultListener loginResultListener) {
this.loginResultListener = loginResultListener;
}
@Override
public void detach(LoginResultListener loginResultListener) {
this.loginResultListener = null;
}
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != RC_SIGN_IN) {
return false;
}
GoogleSignInResult result = googleApiClient.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
loginResultListener.onGooglePlusLoginSuccess(account.getIdToken());
} else {
Log.e("Failed to authenticate GooglePlus", result.getStatus().getStatusCode());
loginResultListener.onGooglePlusLoginFailed(result.getStatus().getStatusMessage());
}
return true;
}
}