package com.novoda.magicmirror.modules.twitter;
import android.os.Handler;
import android.os.Looper;
import com.novoda.magicmirror.modules.twitter.TwitterModule.TwitterListener;
import java.util.concurrent.TimeUnit;
import twitter4j.Status;
class TweetsFlowRegulator {
private static final long REFRESH_DELAY_MILLIS = TimeUnit.SECONDS.toMillis(4);
private final Handler handler;
private final TweetsBuffer tweetsBuffer;
private final TweetPicker tweetPickerAction;
static TweetsFlowRegulator newInstance(TwitterListener listener) {
Handler handler = new Handler(Looper.getMainLooper());
TweetsBuffer tweetsBuffer = new TweetsBuffer();
return new TweetsFlowRegulator(handler, tweetsBuffer, listener);
}
TweetsFlowRegulator(Handler handler, TweetsBuffer tweetsBuffer, TwitterListener listener) {
this.handler = handler;
this.tweetsBuffer = tweetsBuffer;
this.tweetPickerAction = new TweetPicker(tweetsBuffer, listener);
}
private void scheduleNextBeat() {
handler.postDelayed(refreshAction, REFRESH_DELAY_MILLIS);
}
void startTweetPicker() {
handler.post(refreshAction);
}
void stopTweetPicker() {
handler.removeCallbacks(refreshAction);
}
void addTweet(Status tweet) {
tweetsBuffer.addTweet(tweet);
}
private final Runnable refreshAction = new Runnable() {
@Override
public void run() {
handler.post(tweetPickerAction);
scheduleNextBeat();
}
};
private static class TweetPicker implements Runnable {
private final TweetsBuffer tweetsBuffer;
private final TwitterListener listener;
TweetPicker(TweetsBuffer tweetsBuffer, TwitterListener listener) {
this.tweetsBuffer = tweetsBuffer;
this.listener = listener;
}
@Override
public void run() {
Status tweet = tweetsBuffer.pollTweet();
if (tweet != null) {
listener.onNextTweet(tweet);
}
}
}
}