package com.code44.finance.ui.user;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.code44.finance.R;
import com.code44.finance.api.Api;
import com.code44.finance.ui.common.BaseActivity;
import com.code44.finance.ui.playservices.GoogleApiFragment;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;
import javax.inject.Inject;
// TODO http://android-developers.blogspot.co.uk/2014/10/tips-for-integrating-with-google.html
public class LoginActivity extends BaseActivity {
private static final String FRAGMENT_GOOGLE_API = "FRAGMENT_GOOGLE_API";
private static final String STATE_CLEAR_DEFAULT_ACCOUNT = "STATE_CLEAR_DEFAULT_ACCOUNT";
private static final String UNIQUE_GOOGLE_CLIENT_ID = LoginActivity.class.getName();
@Inject Api api;
private GoogleApiFragment googleApi_F;
private boolean clearDefaultAccount;
public static void start(Context context) {
startActivity(context, makeIntentForActivity(context, LoginActivity.class));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup ActionBar
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
setTitle(R.string.login);
// Restore state
clearDefaultAccount = savedInstanceState == null || savedInstanceState.getBoolean(STATE_CLEAR_DEFAULT_ACCOUNT);
googleApi_F = (GoogleApiFragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_GOOGLE_API);
if (googleApi_F == null) {
googleApi_F = new GoogleApiFragment.Builder(UNIQUE_GOOGLE_CLIENT_ID).setUsePlus(true).build();
getSupportFragmentManager()
.beginTransaction()
.add(googleApi_F, FRAGMENT_GOOGLE_API)
.commit();
googleApi_F.connect();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(STATE_CLEAR_DEFAULT_ACCOUNT, clearDefaultAccount);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED) {
finish();
return;
}
googleApi_F.handleOnActivityResult(requestCode, resultCode);
super.onActivityResult(requestCode, resultCode, data);
}
// @SuppressWarnings("UnusedDeclaration")
// TODO public void onEventMainThread(RegisterRequest.RegisterRequestEvent event) {
// if (event.isFinished()) {
// if (event.isError()) {
// GoogleApiClient client = googleApi_F.getClient();
// if (client != null && client.isConnected()) {
// Plus.AccountApi.clearDefaultAccount(client);
// }
//
// //noinspection ThrowableResultOfMethodCallIgnored
// Toast.makeText(this, event.getError().getMessage(), Toast.LENGTH_LONG).show();
// }
// finish();
// }
// }
@SuppressWarnings("UnusedDeclaration")
public void onEventMainThread(GoogleApiFragment.GoogleApiConnectedEvent event) {
if (!UNIQUE_GOOGLE_CLIENT_ID.equals(event.getUniqueClientId())) {
return;
}
GoogleApiClient client = event.getClient();
if (clearDefaultAccount) {
clearDefaultAccount = false;
Plus.AccountApi.clearDefaultAccount(client);
googleApi_F.disconnect();
googleApi_F.connect();
} else {
Person person = Plus.PeopleApi.getCurrentPerson(client);
String email = Plus.AccountApi.getAccountName(client);
login(person, email);
}
}
@SuppressWarnings("UnusedDeclaration")
public void onEventMainThread(GoogleApiFragment.GoogleApiFailedEvent event) {
if (!UNIQUE_GOOGLE_CLIENT_ID.equals(event.getUniqueClientId())) {
return;
}
clearDefaultAccount = false;
}
public void login(Person person, String email) {
final String googleId = person.getId();
final String firstName = person.getName().getGivenName();
final String lastName = person.getName().getFamilyName();
final String photoUrl = person.getImage().getUrl();
final String coverUrl = person.getCover().getCoverPhoto().getUrl();
api.register(email, googleId, firstName, lastName, photoUrl, coverUrl);
}
}