package app.myapp.preubaloginaapp;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
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 com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
public class MainActivity extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener {
ImageView imagen_usuario;
TextView nombre_usuario, correo_usuario, id_usuario;
Button logout, revoke;
private GoogleApiClient googleApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagen_usuario = findViewById(R.id.imagen_usuario);
nombre_usuario = findViewById(R.id.nombre_usuario);
correo_usuario = findViewById(R.id.correo_usuario);
id_usuario = findViewById(R.id.id_usuario);
logout = findViewById(R.id.logout);
revoke = findViewById(R.id.revoke);
logout.setOnClickListener(view -> Logout());
revoke.setOnClickListener(view -> Revoke());
GoogleSignInOptions gso = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApi = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
protected void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi
.silentSignIn(googleApi);
if(opr.isDone()){
GoogleSignInResult gsr = opr.get();
HandleSignResult(gsr);
}else{
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
HandleSignResult(googleSignInResult);
}
});
}
}
private void HandleSignResult(GoogleSignInResult gsr) {
if(gsr.isSuccess()){
GoogleSignInAccount account = gsr.getSignInAccount();
assert account != null;
nombre_usuario.setText(account.getDisplayName());
correo_usuario.setText(account.getEmail());
id_usuario.setText(account.getId());
Glide.with(this).load(account.getPhotoUrl()).into(imagen_usuario);
}else{
GoLoginScreen();
}
}
private void GoLoginScreen(){
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
private void Logout(){
Auth.GoogleSignInApi.signOut(googleApi).setResultCallback(status -> {
if(status.isSuccess()){
GoLoginScreen();
}else{
Toast.makeText(getApplicationContext(),
"Error al cerrar sesión", Toast.LENGTH_SHORT).show();
}
});
}
private void Revoke(){
Auth.GoogleSignInApi.revokeAccess(googleApi).setResultCallback(status -> {
if(status.isSuccess()){
GoLoginScreen();
}else{
Toast.makeText(getApplicationContext(),
"Error al revocar sesión", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onConnectionFailed(@NonNull
ConnectionResult connectionResult) {
}
}