package org.petabytes.awesomeblogs.auth; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import org.petabytes.awesomeblogs.AwesomeBlogsApp; import org.petabytes.awesomeblogs.R; import org.petabytes.awesomeblogs.base.AwesomeActivity; import org.petabytes.awesomeblogs.util.Alerts; import org.petabytes.coordinator.ActivityGraph; import hugo.weaving.DebugLog; public class SignInActivity extends AwesomeActivity implements GoogleApiClient.OnConnectionFailedListener { private static final int SIGN_IN = 1000; private GoogleApiClient googleApiClient; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); googleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build()) .build(); } @Override protected ActivityGraph createActivityGraph() { return new ActivityGraph.Builder() .layoutResId(R.layout.sign_in) .coordinator(R.id.sign_in, new SignInCoordinator(() -> startActivityForResult(Auth.GoogleSignInApi.getSignInIntent(googleApiClient), SIGN_IN))) .build(); } @DebugLog @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); AwesomeBlogsApp.get().authenticator() .signInWithGoogle(result.isSuccess() ? result.getSignInAccount() : null); if (!result.isSuccess()) { Alerts.show(this, R.string.error_title, R.string.error_sign_in); } } } @DebugLog @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Alerts.show(this, R.string.error_title, R.string.error_sign_in); } public static Intent intent(@NonNull Context context) { Intent intent = new Intent(context, SignInActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); return intent; } }