Project: Android-Simple-Social-Sharing
package com.nostra13.example.socialsharing.assist;
 
import java.lang.ref.Reference; 
import java.lang.ref.WeakReference; 
 
import android.app.Activity; 
import android.widget.Toast; 
 
import com.nostra13.example.socialsharing.R; 
import com.nostra13.socialsharing.common.AuthListener; 
import com.nostra13.socialsharing.common.LogoutListener; 
import com.nostra13.socialsharing.common.PostListener; 
import com.nostra13.socialsharing.facebook.FacebookEvents; 
 
/**
 * Observes Facebook events (authentication, publishing, logging out) and shows appropriate {@link Toast toasts}. Use 
 * {@link #registerListeners()} to start observe events and {@link #unregisterListeners()} to stop observing.<br /> 
 * <b>Good practice:</b> Call {@link #registerListeners()} at {@link Activity#onStart()} method and necessarily call 
 * {@link #unregisterListeners()} at {@link Activity#onStop()} method 
 *  
 * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) 
 */
 
public class FacebookEventObserver { 
 
 private Reference<Activity> context; 
 
 private FacebookEventObserver() { 
  context = new WeakReference<Activity>(null); 
 
 
 public static FacebookEventObserver newInstance() { 
  return new FacebookEventObserver(); 
 
 
 private AuthListener authListener = new AuthListener() { 
  @Override 
  public void onAuthSucceed() { 
   showToastOnUIThread(R.string.toast_facebook_auth_success); 
  
 
  @Override 
  public void onAuthFail(String error) { 
   showToastOnUIThread(R.string.toast_facebook_auth_fail); 
  
 }; 
 
 private PostListener postListener = new PostListener() { 
  @Override 
  public void onPostPublishingFailed() { 
   showToastOnUIThread(R.string.facebook_post_publishing_failed); 
  
 
  @Override 
  public void onPostPublished() { 
   showToastOnUIThread(R.string.facebook_post_published); 
  
 }; 
 
 private LogoutListener logoutListener = new LogoutListener() { 
  @Override 
  public void onLogoutComplete() { 
   showToastOnUIThread(R.string.facebook_logged_out); 
  
 }; 
 
 private void showToastOnUIThread(final int textRes) { 
  final Activity curActivity = context.get(); 
  if (curActivity != null) { 
   curActivity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(curActivity, textRes, Toast.LENGTH_SHORT).show(); 
    
   }); 
  
 
 
 /** Should be call at {@link Activity#onStart()} */ 
 public void registerListeners(Activity context) { 
  this.context = new WeakReference<Activity>(context); 
 
  FacebookEvents.addAuthListener(authListener); 
  FacebookEvents.addPostListener(postListener); 
  FacebookEvents.addLogoutListener(logoutListener); 
 
 
 /** Should be call at {@link Activity#onStop()} */ 
 public void unregisterListeners() { 
  context.clear(); 
 
  FacebookEvents.removeAuthListener(authListener); 
  FacebookEvents.removePostListener(postListener); 
  FacebookEvents.removeLogoutListener(logoutListener); 
 
}