package com.odc.beachodc; import android.support.v4.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.UiLifecycleHelper; import com.odc.beachodc.db.models.Playa; import com.odc.beachodc.utilities.Utilities; import com.odc.beachodc.utilities.ValidacionPlaya; import java.util.ArrayList; public class Logout extends FragmentActivity { Fragment logout; private boolean isResumed = false; // Variables para controlar el ciclo de vida de la sesion de Facebook private UiLifecycleHelper uiHelper; private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Ciclo de vida de la sesion de autenticacion de Facebook uiHelper = new UiLifecycleHelper(this, callback); uiHelper.onCreate(savedInstanceState); setContentView(R.layout.activity_logout); FragmentManager fm = getSupportFragmentManager(); logout = fm.findFragmentById(R.id.logOutFragment); // Ocultamos todos los fragments que maneja nuestra activity para despues mostrarlo si procede o saltar a la siguiente activity. FragmentTransaction transaction = fm.beginTransaction(); transaction.show(logout); transaction.commit(); } @Override public void onResume() { super.onResume(); uiHelper.onResume(); isResumed = true; } @Override public void onPause() { super.onPause(); uiHelper.onPause(); isResumed = false; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } @Override protected void onResumeFragments() { super.onResumeFragments(); Session session = Session.getActiveSession(); // Cada vez que la app se ponga en primer plano, comprobaremos si nuestra sesión de FB aun sigue vigente, para entrar directamente. Si ha caducado o hemos hecho logout, mostramos el fragment de Login. if (session != null && session.isOpened()) { // Si esta abierta la sesion no hacer nada } else { // Si no está abierta, está cerrada, redirigir a Login goToLogin(); } } private void onSessionStateChange(Session session, SessionState state, Exception exception) { // Si hacemos login o logout, el estado de la sesion cambiará, por lo que en esta función se controla y se muestra el fragment correspondiente en funcion de si la sesión esta abierta o cerrada. if (isResumed) { if (state.equals(SessionState.OPENED)) { // Si esta abierta la sesion no hacer nada } else if (state.isClosed()) { // Si no está abierta, está cerrada, redirigir a Login goToLogin(); } } } // Funcion encargada de redireccionar a la pantalla de login tras el cierre de sesion de usuario en Facebook public void goToLogin(){ Intent intent = new Intent(this, Inicio.class); // Para borrar el historial del botón atrás y no permitir hacer nada en eso boton ya que nos hemos deslogueado Utilities.storeRegistrationId(this, "", ""); ValidacionPlaya.playasCheckins = new ArrayList<Playa>(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); } }