package com.jdroid.android.sample.ui.google.signin; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.view.View; import android.widget.TextView; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.jdroid.android.fragment.AbstractFragment; import com.jdroid.android.google.signin.GoogleSignInHelper; import com.jdroid.android.google.signin.GoogleSignInListener; import com.jdroid.android.loading.FragmentLoading; import com.jdroid.android.loading.NonBlockingLoading; import com.jdroid.android.sample.R; public class GoogleSignInFragment extends AbstractFragment implements GoogleSignInListener { private GoogleSignInHelper googleSignInHelper; private SignInButton signInButton; private View signOutButton; private View revokeButton; private TextView status; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public Integer getContentFragmentLayout() { return R.layout.google_plus_fragment; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); status = findView(R.id.status); signInButton = findView(R.id.signIn); signInButton.setSize(SignInButton.SIZE_WIDE); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { googleSignInHelper.signIn(); } }); signOutButton = findView(R.id.signOut); signOutButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { googleSignInHelper.signOut(); } }); revokeButton = findView(R.id.revoke); revokeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { googleSignInHelper.revokeAccess(); } }); } @Override public void onStart() { super.onStart(); googleSignInHelper = new GoogleSignInHelper(this, this) { @Override protected Boolean isRequestIdTokenEnabled() { return true; } @Override protected Boolean isServerAuthCodeEnabled() { return true; } }; googleSignInHelper.silentSignIn(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); googleSignInHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onGoogleSignIn(GoogleSignInAccount googleSignInAccount) { StringBuilder builder = new StringBuilder(); builder.append("Display Name: "); builder.append(googleSignInAccount.getDisplayName()); builder.append("\nEmail: "); builder.append(googleSignInAccount.getEmail()); builder.append("\nGranted Scopes: "); builder.append(googleSignInAccount.getGrantedScopes()); builder.append("\nId: "); builder.append(googleSignInAccount.getId()); builder.append("\nId Token: "); builder.append(googleSignInAccount.getIdToken().substring(0, 50)); builder.append("\nServer Auth Code: "); builder.append(googleSignInAccount.getServerAuthCode()); status.setText(builder.toString()); signInButton.setVisibility(View.GONE); signOutButton.setVisibility(View.VISIBLE); revokeButton.setVisibility(View.VISIBLE); Snackbar.make(findView(R.id.container), "onGoogleSignIn", Snackbar.LENGTH_SHORT).show(); } @Override public void onGoogleSignOut() { status.setText("Not Logged"); signInButton.setVisibility(View.VISIBLE); signOutButton.setVisibility(View.GONE); revokeButton.setVisibility(View.GONE); Snackbar.make(findView(R.id.container), "onGoogleSignOut", Snackbar.LENGTH_SHORT).show(); } @Override public void onGoogleAccessRevoked() { status.setText("Not Logged"); signInButton.setVisibility(View.VISIBLE); signOutButton.setVisibility(View.GONE); revokeButton.setVisibility(View.GONE); Snackbar.make(findView(R.id.container), "onGoogleAccessRevoked", Snackbar.LENGTH_SHORT).show(); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { status.setText("Connection Failed"); signInButton.setVisibility(View.VISIBLE); signOutButton.setVisibility(View.GONE); revokeButton.setVisibility(View.GONE); Snackbar.make(findView(R.id.container), "onConnectionFailed", Snackbar.LENGTH_SHORT).show(); } @Override public FragmentLoading getDefaultLoading() { return new NonBlockingLoading(); } }