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.twitter.TwitterEvents;
/**
* Observes Twitter 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 TwitterEventObserver {
private Reference<Activity> context;
private TwitterEventObserver() {
context = new WeakReference<Activity>(null);
}
public static TwitterEventObserver newInstance() {
return new TwitterEventObserver();
}
private AuthListener authListener = new AuthListener() {
@Override
public void onAuthSucceed() {
showToastOnUIThread(R.string.toast_twitter_auth_success);
}
@Override
public void onAuthFail(String error) {
showToastOnUIThread(R.string.toast_twitter_auth_fail);
}
};
private PostListener postListener = new PostListener() {
@Override
public void onPostPublishingFailed() {
showToastOnUIThread(R.string.twitter_post_publishing_failed);
}
@Override
public void onPostPublished() {
showToastOnUIThread(R.string.twitter_post_published);
}
};
private LogoutListener logoutListener = new LogoutListener() {
@Override
public void onLogoutComplete() {
showToastOnUIThread(R.string.twitter_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();
}
});
}
}
public void registerListeners(Activity context) {
this.context = new WeakReference<Activity>(context);
TwitterEvents.addAuthListener(authListener);
TwitterEvents.addPostListener(postListener);
TwitterEvents.addLogoutListener(logoutListener);
}
public void unregisterListeners() {
context.clear();
TwitterEvents.removeAuthListener(authListener);
TwitterEvents.removePostListener(postListener);
TwitterEvents.removeLogoutListener(logoutListener);
}
}