package com.gettingmobile.google.reader.sync;
class SimpleSyncCallbackHelper implements SyncCallbackHelper {
private static final int MIN_PROGRESS_UPDATE_INTERVAL_NANOS = 500 * 1000 * 1000;
private final CallbackHandler callbackHandler;
private final SyncCallback callback;
private int maxProgress = 0;
private int progress = 0;
private int unreadCount = 0;
private int newUnreadCount = 0;
private int skipCount = 0;
private long lastProgressUpdateNanoTime = 0;
public SimpleSyncCallbackHelper(CallbackHandler callbackHandler, SyncCallback callback) {
this.callbackHandler = callbackHandler;
this.callback = callback;
}
@Override
public void setMaxProgress(int maxProgress) {
this.maxProgress = maxProgress;
sendProgressUpdate();
}
@Override
public void addMaxProgress(int additionalMaxProgress) {
maxProgress += additionalMaxProgress;
sendProgressUpdate();
}
@Override
public void incrementProgress() {
incrementProgress(1);
}
@Override
public void incrementProgress(int steps) {
progress += steps;
sendProgressUpdate();
}
@Override
public void setUnreadCount(int unreadCount) {
this.unreadCount = unreadCount;
}
@Override
public void setNewUnreadCount(int newUnreadCount) {
this.newUnreadCount = newUnreadCount;
}
@Override
public void incrementSkipCount() {
++skipCount;
}
@Override
public void onSyncFinished(SyncException error) {
callbackHandler.sendSyncFinished(callback, error, unreadCount, newUnreadCount, skipCount);
}
protected void sendProgressUpdate() {
final long nanoTime = System.nanoTime();
if (nanoTime - lastProgressUpdateNanoTime > MIN_PROGRESS_UPDATE_INTERVAL_NANOS || progress >= maxProgress) {
callbackHandler.sendProgressUpdate(callback, progress, maxProgress);
lastProgressUpdateNanoTime = nanoTime;
}
}
}