package com.geored.gui; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.facebook.LoggingBehaviors; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.Settings; import com.facebook.android.R; import com.geored.rest.Main; import com.geored.rest.ServicioRestAutenticacion; import com.geored.rest.exception.RestBlowUpException; import com.geored.rest.exception.UnauthorizedException; public class FacebookActivity extends GenericActivity { //static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token="; TextView textInstructionsOrLink; Button buttonLoginLogout; Session.StatusCallback statusCallback = new SessionStatusCallback(); @Override protected void goToPreviousActivity(){ Intent setIntent = new Intent(this,Main.class); startActivity(setIntent); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_facebook); buttonLoginLogout = (Button) findViewById(R.id.buttonLoginLogout); textInstructionsOrLink = (TextView) findViewById(R.id.instructionsOrLink); Settings.addLoggingBehavior(LoggingBehaviors.INCLUDE_ACCESS_TOKENS); Session session = Session.getActiveSession(); if (session == null) { if (savedInstanceState != null) { session = Session.restoreSession(this, null, statusCallback, savedInstanceState); } if (session == null) { session = new Session(this); } Session.setActiveSession(session); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { session.openForRead(new Session.OpenRequest(this) .setCallback(statusCallback)); } } updateView(); } @Override public void onStart() { super.onStart(); Session.getActiveSession().addCallback(statusCallback); } @Override public void onStop() { super.onStop(); Session.getActiveSession().removeCallback(statusCallback); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Session session = Session.getActiveSession(); Session.saveSession(session, outState); } private void updateView() { Session session = Session.getActiveSession(); if (session.isOpened()) { textInstructionsOrLink.setText("Bienvenido a Geored.uy, usted se a autenticado por Facebook, estamos chequeando esta sea una cuenta valida."); buttonLoginLogout.setText(R.string.logout); buttonLoginLogout.setOnClickListener(new OnClickListener() { public void onClick(View view) { onClickLogout(); } }); } else { textInstructionsOrLink.setText(R.string.instructions); buttonLoginLogout.setText(R.string.login); buttonLoginLogout.setOnClickListener(new OnClickListener() { public void onClick(View view) { onClickLogin(); } }); } } private void onClickLogin() { final Session session = Session.getActiveSession(); if (!session.isOpened() && !session.isClosed()) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } else { Session.openActiveSession(this, true, statusCallback); } } private void onClickLogout() { Session session = Session.getActiveSession(); if (!session.isClosed()) { session.closeAndClearTokenInformation(); } } private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(final Session session, SessionState state, Exception exception) { if (state.isOpened()) { AsyncTask<Void, Void, Void> serverLoginTask = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { ServicioRestAutenticacion.loginFacebook(session.getAccessToken()); goToActivity(UsuarioActivity.class); } catch (RestBlowUpException e) { Log.e("Error", e.getMessage(), e); } catch (UnauthorizedException e) { Log.e("Warning", "Unauthorized - " + e.getMessage(), e); } return null; } }; serverLoginTask.execute(); } updateView(); } } }